• 3.3.4. 自定义实例及子类检查

    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 模块)。