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

标签 python python-2.x isinstance

据我了解,由于类型/类统一,每个 值都是从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/

相关文章:

python - 如何提取图中所有包含峰的曲线的斜率?

python - 将 float 转换为位置格式的字符串(没有科学记数法和错误精度)

python - 为什么 Python 的 `except` 不使用 `isinstance` ?

python - __instancecheck__ - 覆盖没有效果 - 我做错了什么?

python - isinstance 在 python 中如何为子类工作?

python - 无法连接到 FTP 服务器

python - 在 python 中,Jinja2 模板在双引号前返回一个反斜杠,我需要删除它

java - 是否有适用于 Jython 或 JRuby 的框架,或者您可以在 JVM 上运行 py 或 ruby​​ 应用程序吗?

Python 统一码 : why in one machine works but in another one it failed sometimes?

解析时Python意外的EOF