【发布时间】:2011-07-12 18:33:20
【问题描述】:
有时我看到一些类被定义为对象类的子类,如
class my_class(object):
pass
如果与简单的定义不同
class my_class():
pass
【问题讨论】:
-
在旧版本的 Python 中,后者是语法错误。
标签: python
有时我看到一些类被定义为对象类的子类,如
class my_class(object):
pass
如果与简单的定义不同
class my_class():
pass
【问题讨论】:
标签: python
此语法声明new-style class。
【讨论】:
第一个是新样式类,第二个是旧样式类。
编辑
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__']
【讨论】:
对于 Python 3.x,没有区别。在 Python 2.x 中,派生自 object 会生成一个类 new-style,而不提供基类会给你一个老式的类。
【讨论】:
对于 Python 2.x 中的 new-style 类,您必须显式继承自 object。不声明一个类继承自 object 会给你一个老式的类。在 Python 3.x 中,不再需要从 object 显式继承,因此您可以在 Python 3.x 中使用 Python 2.x 旧样式类语法 class Klass: pass 声明并取回新样式(或只是一个类)类。
【讨论】:
这是“新”样式,您的问题类似于 Python class inherits object
【讨论】: