【问题标题】:python class definition [duplicate]python类定义[重复]
【发布时间】:2011-07-12 18:33:20
【问题描述】:

有时我看到一些类被定义为对象类的子类,如

class my_class(object):
    pass

如果与简单的定义不同

class my_class():
    pass

【问题讨论】:

标签: python


【解决方案1】:

此语法声明new-style class

【讨论】:

  • +∞:哦,看这个问题已经在文档中回答了。我希望人们多读书,少问。
【解决方案2】:

第一个是新样式类,第二个是旧样式类。

编辑

In [1]: class A:
   ...:     pass
   ...: 

In [2]: class B(object):
   ...:     pass
   ...: 

In [3]: a = A()

In [4]: b = B()

In [5]: dir(a)
Out[5]: ['__doc__', '__module__']

In [6]: dir(b)
Out[6]: 
['__class__',
 '__delattr__',
 '__dict__',
 '__doc__',
 '__format__',
 '__getattribute__',
 '__hash__',
 '__init__',
 '__module__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__']

【讨论】:

  • 对象的子类化是否会为类 my_class 带来任何继承的属性?
【解决方案3】:

对于 Python 3.x,没有区别。在 Python 2.x 中,派生自 object 会生成一个类 new-style,而不提供基类会给你一个老式的类。

【讨论】:

    【解决方案4】:

    对于 Python 2.x 中的 new-style 类,您必须显式继承自 object。不声明一个类继承自 object 会给你一个老式的类。在 Python 3.x 中,不再需要从 object 显式继承,因此您可以在 Python 3.x 中使用 Python 2.x 旧样式类语法 class Klass: pass 声明并取回新样式(或只是一个类)类。

    【讨论】:

      【解决方案5】:

      这是“新”样式,您的问题类似于 Python class inherits object

      【讨论】:

        猜你喜欢
        • 2018-04-23
        • 2016-05-17
        • 2015-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-09
        相关资源
        最近更新 更多