python类定义[重复]

Posted

技术标签:

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

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

class my_class(object):
    pass

如果与简单的定义不同

class my_class():
    pass

【问题讨论】:

***.com/questions/332255/… 在旧版本的 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

【讨论】:

以上是关于python类定义[重复]的主要内容,如果未能解决你的问题,请参考以下文章

类型化的python:在类定义中使用类自己的类型[重复]

在Python中定义类变量的正确方法[重复]

Python:可以将自定义类用作字典的键吗? [重复]

关于python类定义的一个基本问题[重复]

Python - 如何按定义的顺序将类变量存储到数组中[重复]

两个类定义之间的差异是啥[重复]