2013-11-25 108 views
2

對於一個類定義,沒有繼承,有什麼區別或風格偏好:M類:或M類():?

class M: 
    pass 

class M(): 
    pass 

我在PEP8中找不到它。

+0

如果它不是在PEP8,另一個好的地方獲得建議是通過查看標準庫 –

+0

FWIW,我仍然陷入雖然它在python3.x中毫無意義...... – mgilson

+0

@mgilson:因爲他們重寫了教程以刪除所有的(對象)基礎,所以我認爲它是再也不能站出來說「每個人都應該總是從」物體「繼承下來,它仍然是完美的可以總是這樣做,但這仍然留下了「人們什麼時候不這樣做,他們應該怎麼拼出來」的問題,這是OP的要求。 – abarnert

回答

7

它不在PEP 8中,因爲在Python 3的早期,Guido建議每個人都應該在過渡期間明確從object繼承。可能這應該更新...

但是,如果您查看文檔中不使用class M(object):的所有示例,它們都使用第一種格式class M:

例如,請參閱Class Definition SyntaxClass Objects以及本教程中的所有以下部分。 (並且請注意,本教程甚至沒有解釋您可以在括號內使用零基類。)

(另外,至少對我來說,第二種格式意味着您明確地試圖從無到有繼承,這是誤導,而第一個暗示,你只是在做任何默認設置。)

+1

+1。實際上,PEP8實際上是用Python 2編寫的,當[實際差異](明確地繼承)之間有一個[實際差異](http://stackoverflow.com/questions/54867/old-style-and-new-style-classes-in-python) 'object'並且什麼都沒有指定。我也同意,如果從對象繼承的空括號會使它有點模糊(儘管它總是會)。所以第一種方式將是首選。 – poke

+0

@poke:很好的補充。但PEP8應該隨着語言的發展而變化(最近最新修訂於2013年8月1日),所以現在可能應該涵蓋這種情況。但是,如果有人非常關心,想要更改它,那麼就需要在bug跟蹤器或其中一個列表上進行討論。 – abarnert

相關問題