【问题标题】:What is object() good for?object() 有什么用?
【发布时间】:2015-02-03 18:41:28
【问题描述】:

这怎么可能

class EmptyClass:
    def __init__(self):
        pass

e = EmptyClass()
e.a = 123

工作并且:

o = object()
o.a = 123

不 (AttributeError: 'object' object has no attribute 'a') 而

print isinstance(e, object)
>>> True

?

object() 有什么用,当你不能这样使用它的时候?

【问题讨论】:

标签: python class object


【解决方案1】:

您不能向object 的实例添加属性,因为object 没有__dict__ attribute(它将存储属性)。来自docs

class object

返回一个新的无特征对象。 object 是所有类的基础。它具有所有 Python 类实例通用的方法。 此函数不接受任何参数。

注意: object 没有__dict__,因此您不能将任意属性分配给object 类的实例。

object 确实有它的用途:

  1. 如上所述,它充当 Python 中所有对象的基类。你看到和使用的一切最终都依赖于object

  2. 您可以使用object 创建完全独特的sentinel values。使用isis not 测试它们只会在给出确切的object 实例时返回True

  3. 在 Python 2.x 中,您可以(应该)从 object 继承以创建 new-style class。新型类具有增强的功能和更好的支持。请注意,所有类在 Python 3.x 中都自动成为新样式。

【讨论】:

  • 它还可以方便地生成我们可以用作标记值的唯一对象(我们不能在任何地方使用None)。
  • 我偶尔会用它来创建一个独特的对象(带有独特的id),在处理可能包含None或零长度的数据时,它可以用作特殊标记或sentinel value有效的非标记值的项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 2011-08-12
  • 2016-06-16
  • 1970-01-01
相关资源
最近更新 更多