3.3.4. 自定义实例及子类检查
以下方法被用来重载 isinstance()
和 issubclass()
内置函数的默认行为。
特别地,元类 abc.ABCMeta
实现了这些方法以便允许将抽象基类(ABC)作为“虚拟基类”添加到任何类或类型(包括内置类型),包括其他 ABC 之中。
class.
instancecheck
(self, instance)- 如果 instance 应被视为 class 的一个(直接或间接)实例则返回真值。如果定义了此方法,则会被调用以实现
isinstance(instance, class)
。
class.
subclasscheck
(self, subclass)- Return true 如果 subclass 应被视为 class 的一个(直接或间接)子类则返回真值。如果定义了此方法,则会被调用以实现
issubclass(subclass, class)
。
请注意这些方法的查找是基于类的类型(元类)。它们不能作为类方法在实际的类中被定义。这与基于实例被调用的特殊方法的查找是一致的,只有在此情况下实例本身被当作是类。
参见
- PEP 3119 - 引入抽象基类
- 新增功能描述,通过
instancecheck()
和subclasscheck()
来定制isinstance()
和issubclass()
行为,加入此功能的动机是出于向该语言添加抽象基类的内容(参见abc
模块)。