8.2.5 检测继承关系
在很多场景中,需要知道一个类A是否是从另外一个类B继承,这种校验主要是为了调用B类中的成员(方法和属性)。如果B是A的父类,那么创建A类的实例肯定会拥有B类所有的成员,关键是要判断B是否为A的父类。
判断类与类之间的关系可以使用issubclass函数,该函数接收两个参数,第1个参数是子类、第2个参数是父类。如果第1个参数指定的类与第2个参数指定的类确实是继承关系,那么该函数返回True,否则返回False。
# myclass2是myclass1的父类,返回True,否则返回False
issubclass(myclass1,myclass2)
如果想要获得已知类的父类(们),可以直接使用"__bases__"
,这是类的一个特殊属性,bases两侧是双下划线。
print(myclass.__bases__)
执行这行代码,如果myclass类的父类是parentclass,那么会输出如下内容。
(<class '__main__.myparentclass'>,)
除了可以使用前面介绍的方法检测类本身的继承关系外,还可以使用isinstance函数检测一个对象是否是某一个对象的实例。isinstance函数有两个参数,第1个参数是要检测的对象,第2个参数是一个类。如果第1个参数指定的对象是第2个参数指定的类的实例,那么该函数返回True,否则返回False。
person = persons()
# 如果person对象是persons类的实例,返回True,否则返回False
print(isinstance(person,persons))
[例 8.5] 本例创建了4个类,其中childclass、parentclass和myparentclass三个类有继承关系,也就是说,后一个类是前一个类的父类。另外一个myclass类是一个独立的类。接下来利用这4个类来演示issubclass
、__bases__
和isinstance
的用法。
# 创建4个类
# 父类
class