Python 如何使用uuu子项检查uuuuu魔法方法?

Python 如何使用uuu子项检查uuuuu魔法方法?,python,inheritance,python-2.x,subclassing,metaclass,Python,Inheritance,Python 2.x,Subclassing,Metaclass,我们怎样才能使一个类对他所属的子类撒谎呢 在阅读了本文之后,我尝试了以下几点: >>> class AllYourBase(type): ... @classmethod ... def __subclasscheck__(cls, other): ... return True ... >>> class AllYour(object): ... __metaclass__ = AllYourBase 现在

我们怎样才能使一个类对他所属的子类撒谎呢

在阅读了本文之后,我尝试了以下几点:

>>> class AllYourBase(type):
...     @classmethod
...     def __subclasscheck__(cls, other):
...         return True
...     
>>> class AllYour(object):
...     __metaclass__ = AllYourBase
现在,这个班应该报告你所有的基地都属于他

但它不起作用:

>>> issubclass(AllYour, int)
False

为什么不呢?

如果你想让你所有的
都声称自己是每个类的子类,那是不可能的<代码>\uuuu子项检查
在另一个方向工作


如果希望
AllYour
声明每个类都将其子类化,请删除
@classmethod
装饰器,并在
issubclass
调用中切换参数。您在元类上定义的特殊方法不需要特殊修饰。

事实上,
@classmethod
意味着元类将被传递给
\uuuu subasscheck\uuuu()
。您需要一个常规实例方法(实例是您的所有类)。删除此装饰程序不会更改behaviour@wim:仔细检查后,您的
issubclass
调用中的参数顺序似乎不正确。如果你想要一个声称是每个类的子类的类,而不是声称每个类都是它的子类,那是不可能的。我想要另一种方式。我们可以用monkeypatch
打字吗?@wim:如果你用正确的方式处理ctypes的话。不过它会很脆弱。我尝试通过使用
gc.getreferents(type.\uuuu dict\uuu)[0]
来修补
type.\uu subasscheck\uu
以通过dict\u代理,但它只是使Python崩溃。