如何使用__subclasscheck__魔术方法?
How to use the __subclasscheck__ magic method?
我们怎样才能让一个 class 谎称他有子class谁?
阅读 doc 之后,我尝试了这个:
>>> class AllYourBase(type):
... @classmethod
... def __subclasscheck__(cls, other):
... return True
...
>>> class AllYour(object):
... __metaclass__ = AllYourBase
现在,这个class应该报告说你所有的基地都是他的。
但是没有用:
>>> issubclass(AllYour, int)
False
为什么不呢?
如果您希望 AllYour
声称自己是每个 class 的子class,那是不可能的。 __subclasscheck__
工作在另一个方向。
如果您希望 AllYour
声称每个 class 子class 都是它,请删除 @classmethod
装饰器,并切换 [=14= 中的参数] 称呼。您在 metaclass 上定义的特殊方法不需要特殊修饰。
我们怎样才能让一个 class 谎称他有子class谁?
阅读 doc 之后,我尝试了这个:
>>> class AllYourBase(type):
... @classmethod
... def __subclasscheck__(cls, other):
... return True
...
>>> class AllYour(object):
... __metaclass__ = AllYourBase
现在,这个class应该报告说你所有的基地都是他的。
但是没有用:
>>> issubclass(AllYour, int)
False
为什么不呢?
如果您希望 AllYour
声称自己是每个 class 的子class,那是不可能的。 __subclasscheck__
工作在另一个方向。
如果您希望 AllYour
声称每个 class 子class 都是它,请删除 @classmethod
装饰器,并切换 [=14= 中的参数] 称呼。您在 metaclass 上定义的特殊方法不需要特殊修饰。