【问题标题】:Can a non-object exist in Python?Python中可以存在非对象吗?
【发布时间】:2015-08-01 04:23:08
【问题描述】:

众所周知,Python 中的一切都是对象。我想知道的是是否有可能创建一个“对象”x 使得isinstance(x, object) 返回False。我怀疑有可能充分滥用 CPython API,尽管使用纯 Python 实现这一点会更有趣。

最初我认为旧式类会返回 False,因为对象层次结构可能不完全适用,但对于旧式类的实例,isinstance(x, object) 确实是 True

虽然这主要是理论上的兴趣,但如果 Python 允许创建与基本 object 类型断开连接的新对象层次结构,它可能会很有趣(或危险)。

【问题讨论】:

    标签: python object base-class


    【解决方案1】:

    当然,您可以通过 C API 完成所有操作(尤其是通过很棒的 forbiddenfruit 模块)

    >>> from forbiddenfruit import curse
    >>> class C: pass
    ... 
    >>> curse(type, "__instancecheck__", lambda cls, obj: type(obj) != C)
    >>> isinstance(C(), object)
    False
    >>> isinstance(C(), C)
    True
    

    【讨论】:

      【解决方案2】:

      来自文档,第 3 章(数据模型):“Python 程序中的所有数据都由对象表示。”看起来够清楚了。您说替代方案“可能很有趣”,但已经有很多有趣的东西不是 Python。

      【讨论】:

      • 我区分了对象和objects。前者是 OOP 对象,Python 在整个过程中都清楚地使用了这些对象。后者是object 的实例,它是Python 中的一个特定基类。
      猜你喜欢
      • 1970-01-01
      • 2013-05-03
      • 2011-11-26
      • 2010-12-29
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      相关资源
      最近更新 更多