据我了解,由于类型/类统一,每个 值都是从object
派生的类型。但是我在文档中找不到对此的绝对确认。虽然按理说 isinstance(anything, object)
应该始终为 True
,但我也可以想象在 Python 2 代码库中存在遗留的边缘情况。有谁知道 isinstance(value, object)
是 not True
的例子吗?
上下文:作为我正在设计的类型层次结构的一部分,有一个包罗万象的 Alpha
类型,我希望它始终返回 isinstance(obj, Alpha)
真
。我认为在 Python 2.6+ 上 ABCMeta.register(object)
应该可以解决问题,但我想确定一下。
编辑:为了后代的缘故,ABCMeta.register(object)
将不起作用(尝试一下)。 Ethan Furman 在下面的回答中为这种情况提供了替代解决方案。
最佳答案
可以在非 Python 代码(例如 C
)中创建不是从 object
派生的类。
你应该能够通过将 __subclasshook__
添加到你的 Alpha
来实现你想要的:
--> import abc
--> class Test(object):
... __metaclass__ = abc.ABCMeta
... @classmethod
... def __subclasshook__(cls, C):
... return True
...
--> isinstance(dict(), Test)
True
--> isinstance(42, Test)
True
--> isinstance(0.59, Test)
True
--> class old_style:
... pass
...
--> isinstance(old_style(), Test)
True
关于python - Python 中是否存在 isinstance(value, object) 不为 True 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9640056/