2011-03-10 57 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中聲明並取回新樣式(或僅僅是一個類)類。