python类定义

python class definition

本问题已经有最佳答案,请猛点这里访问。

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

1
2
class my_class(object):
    pass

如果不同于简单的定义

1
2
class my_class():
    pass


此语法声明一个新的样式类。


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

编辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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 2.x中的新样式类,必须从object显式继承。不声明从object继承的类会给您一个旧样式的类。在python 3.x中,不再需要从object显式继承,因此您可以在python 3.x中使用python 2.x旧样式的类语法class Klass: pass声明,并返回一个新样式(或只是一个类)类。


对于python 3.x,没有区别。在python 2.x中,从object派生的类使类成为新的样式,而不提供任何基本类都不会给您一个旧的样式类。


这是"新"样式,您的问题类似于python类继承对象