2011-03-10 28 views
2

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

class my_class(object): 
    pass 

如何是如果不同于简单的定义为

class my_class(): 
    pass 
+4

http://stackoverflow.com/questions/332255/difference-between-class-foo-and-class-fooobject-in -python – 2011-03-10 14:30:13

+1

在旧版本的Python中,后者是语法错误。 – 2011-03-10 14:30:37

回答

6

此语法声明一个new-style class

+3

+∞:哦,看看问题已经在文档中回答了。我希望人们会读更多并且问得更少。 – 2011-03-10 15:45:45

4

第一个是新风格类,第二个是旧风格类。

编辑

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__'] 
+1

从对象继承是否将任何继承的属性带给类my_class? – 2011-03-10 14:30:24

+1

似乎是这样。检查我的编辑。 – gruszczy 2011-03-10 14:38:32

3

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

3

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