6

我的理解是,由于类型/类统一,每个值都是派生自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 在下面的回答中为这种情况提供了另一种解决方案。

4

2 回答 2

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
于 2012-03-09T20:01:46.983 回答
0

在 2.x 中,用户定义的类(和一些 stdlib 类)默认情况下不是从 object 派生的。这在 3.x 中已修复。

于 2012-03-09T20:08:05.527 回答