diff --git a/PyNDN/Interest.py b/PyNDN/Interest.py
index 571bc36..b4b5b9a 100644
--- a/PyNDN/Interest.py
+++ b/PyNDN/Interest.py
@@ -28,9 +28,9 @@
                  name = None, scope = None, interestLifetime = None,
                  interest = None):
         if interest:
-            if type (interest) is Interest:
+            if isinstance (interest, Interest):
                 self._interest = interest._interest
-            elif type (interest) is ns.ndnSIM.ndn.Interest:
+            elif isinstance (interest, ns.ndnSIM.ndn.Interest):
                 self._interest = interest
             else:
                 raise TypeError ("Invalid type supplied for 'interest' parameter [%s]" % type (interest))
@@ -66,27 +66,27 @@
             return object.__setattr__ (self, name, value)
 
         elif name == "name":
-            if not value:
+            if value is None:
                 return self._interest.SetName (ns.ndnSIM.ndn.Name ())
-            elif type (value) is Name:
+            elif isinstance (value, Name):
                 return self._interest.SetName (value._name)
-            elif type (value) is ns.ndnSIM.ndn.Name:
+            elif isinstance (value, ns.ndnSIM.ndn.Name):
                 return self._interest.SetName (value)
-            elif type (value) is str:
+            elif isinstance (value, str):
                 return self._interest.SetName (ns.ndnSIM.ndn.Name (value))
             else:
                 raise ValueError ("Invalid name parameter")
         elif name == "scope":
-            if not value:
+            if value is None:
                 return self._interest.SetScope (-1)
-            elif type (value) is int:
+            elif isinstance (value, int):
                 return self._interest.SetScope (value)
             else:
                 raise ValueError ("Scope parameter should be int, [%s] supplied" % type (value))
         elif name == "interestLifetime":
-            if not value:
+            if value is None:
                 return self._interest.SetInterestLifetime (ns.core.Time ())
-            elif type (value) is float or type (value) is int:
+            elif isinstance (value, float) or isinstance (value, int):
                 return self._interest.SetInterestLifetime (ns.core.Seconds (value))
             else:
                 raise ValueError ("interestLifetime parameter should be fload or int, [%s] supplied" % type (value))
