我的理解是,由于类型/类统一每个值都是从object
派生的类型。但是我在文档中找不到对此的绝对确认。虽然isinstance(anything, object)
应始终为True
,但我可以想象Python 2代码库中存在遗留边缘情况。有谁知道isinstance(value, object)
不 True
的示例?
上下文:作为我正在设计的类型层次结构的一部分,我希望Alpha
始终返回isinstance(obj, Alpha)
,这是一种全方位的True
类型。我认为在Python 2.6+上ABCMeta.register(object)
应该可以解决问题,但我想确定。
编辑:为了后人,ABCMeta.register(object)
将无效(尝试一下)。 Ethan Furman在下面的回答中提供了另一种解决方案。
答案 0 :(得分:1)
可以在非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
答案 1 :(得分:0)
在2.x中,默认情况下,用户定义的类(以及一些stdlib类)不从对象派生。这在3.x中已得到修复。