Python中是否存在isinstance(value,object)不是True的值?

时间:2012-03-09 19:47:30

标签: python python-2.x isinstance

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

2 个答案:

答案 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中已得到修复。

相关问题