Python issue with inheritence

I'm trying to check if a inherited class is an instance of it's superclass. But the inherited class and the super class are in separate files. I'm importing the inherited class with importlib as a dynamic import. So for example: python1.py:
class MySuperClass:
pass
class MySuperClass:
pass
python2.py:
from python1 import MySuperClass

class MyInheritedClass(MySuperClass):
pass
from python1 import MySuperClass

class MyInheritedClass(MySuperClass):
pass
python3.py:
import importlib
from python1 import MySuperClass

module = importlib.import_module('python2')
inheritedClass = getattr(module, 'MyInheritedClass')
if isinstance(inheritedClass, MySuperClass):
print("MyInheritedClass is instance of MySuperClass")
else:
print("MyInheritedClass isn't an instance of MySuperClass")
import importlib
from python1 import MySuperClass

module = importlib.import_module('python2')
inheritedClass = getattr(module, 'MyInheritedClass')
if isinstance(inheritedClass, MySuperClass):
print("MyInheritedClass is instance of MySuperClass")
else:
print("MyInheritedClass isn't an instance of MySuperClass")
This prints: MyInheritedClass isn't an instance of MySuperClass Does anyone know why that is the case?
1 Reply
Pumpkin
Pumpkin4w ago
inheritedClass is a reference to the class itself, not an instance of the class. Hence isinstance is False, because it is just an instance of type.
import importlib
from python1 import MySuperClass

module = importlib.import_module('python2')
inheritedClass = getattr(module, 'MyInheritedClass')
if issubclass(inheritedClass, MySuperClass):
print("MyInheritedClass is a subclass of MySuperClass")
else:
print("MyInheritedClass isn't a subclass of MySuperClass")

instance = inheritedClass()
if isinstance(instance, MySuperClass):
print("instance is a subclass of MySuperClass")
else:
print("instance isn't a subclass of MySuperClass")
import importlib
from python1 import MySuperClass

module = importlib.import_module('python2')
inheritedClass = getattr(module, 'MyInheritedClass')
if issubclass(inheritedClass, MySuperClass):
print("MyInheritedClass is a subclass of MySuperClass")
else:
print("MyInheritedClass isn't a subclass of MySuperClass")

instance = inheritedClass()
if isinstance(instance, MySuperClass):
print("instance is a subclass of MySuperClass")
else:
print("instance isn't a subclass of MySuperClass")
$ python python3.py
MyInheritedClass is a subclass of MySuperClass
instance is a subclass of MySuperClass
$ python python3.py
MyInheritedClass is a subclass of MySuperClass
instance is a subclass of MySuperClass

Did you find this page helpful?