可以 通过定义魔术方法来控制使用内置函数 isinstance() 和 issubclasd 行为的反射方式。
以instancecheck为例,注意 __instancecheck__ 必须要在元类中定义
代码:
In [1]: class MetaSizeable(type):
...: def __instancecheck__(cls, instance):
...: print("__instancecheck__ call")
...: return hasattr(instance, "__len__")
In [2]: class Sizeable(metaclass=MetaSizeable):
...: pass
In [3]: sa = Sizeable()
In [4]: isinstance(sa, Sizeable)
Out[4]: True
In [5]: isinstance([], Sizeable)
__instancecheck__ call
Out[5]: True
反射魔术方法 不太常用, 只做一个简单的介绍