可以 通过定义魔术方法来控制使用内置函数 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
反射魔术方法 不太常用, 只做一个简单的介绍
本文介绍了如何通过定义__instancecheck__魔术方法控制isinstance()和issubclass()的反射行为,展示了在类元类中实现这一功能的实例,并简要讨论了反射在编程中的应用和其相对较少的使用场景。
8万+

被折叠的 条评论
为什么被折叠?



