diff --git a/test/vpp_object.py b/test/vpp_object.py
index 2c07d47..df44efb 100644
--- a/test/vpp_object.py
+++ b/test/vpp_object.py
@@ -11,36 +11,36 @@
     """ Abstract vpp object """
 
     @abc.abstractmethod
-    def add_vpp_config(self):
+    def add_vpp_config(self) -> None:
         """ Add the configuration for this object to vpp. """
         pass
 
     @abc.abstractmethod
-    def query_vpp_config(self):
+    def query_vpp_config(self) -> bool:
         """Query the vpp configuration.
 
         :return: True if the object is configured"""
         pass
 
     @abc.abstractmethod
-    def remove_vpp_config(self):
+    def remove_vpp_config(self) -> None:
         """ Remove the configuration for this object from vpp. """
         pass
 
-    def object_id(self):
+    def object_id(self) -> str:
         """ Return a unique string representing this object. """
         return "Undefined. for <%s %s>" % (self.__class__.__name__, id(self))
 
-    def __str__(self):
+    def __str__(self) -> str:
         return self.object_id()
 
-    def __repr__(self):
+    def __repr__(self) -> str:
         return '<%s>' % self.object_id()
 
-    def __hash__(self):
+    def __hash__(self) -> int:
         return hash(self.object_id())
 
-    def __eq__(self, other):
+    def __eq__(self, other) -> bool:
         if not isinstance(other, self.__class__):
             return NotImplemented
         if other.object_id() == self.object_id():
@@ -56,14 +56,14 @@
     """ Class which handles automatic configuration cleanup. """
     _shared_state = {}
 
-    def __init__(self):
+    def __init__(self) -> None:
         self.__dict__ = self._shared_state
         if not hasattr(self, "_object_registry"):
             self._object_registry = []
         if not hasattr(self, "_object_dict"):
             self._object_dict = dict()
 
-    def register(self, obj, logger):
+    def register(self, obj: VppObject, logger) -> None:
         """ Register an object in the registry. """
         if obj.object_id() not in self._object_dict:
             self._object_registry.append(obj)
@@ -72,13 +72,13 @@
         else:
             logger.debug("REG: duplicate add, ignoring (%s)" % obj)
 
-    def unregister_all(self, logger):
+    def unregister_all(self, logger) -> None:
         """ Remove all object registrations from registry. """
         logger.debug("REG: removing all object registrations")
         self._object_registry = []
         self._object_dict = dict()
 
-    def remove_vpp_config(self, logger):
+    def remove_vpp_config(self, logger) -> None:
         """
         Remove configuration (if present) from vpp and then remove all objects
         from the registry.
