如何使用__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 上定义的特殊方法不需要特殊修饰。