2014-04-24 79 views
2

我在某些代碼上跑了pylint,並對老式班級抱怨。將舊式班級改寫爲新班級

我可以通過簡單地改變糾正這個:

class MyClass: 

到:

class MyClass(object): 

或者是有什麼更多的參與?

+5

這是非常多的。 – BrenBarn

+0

簡單的回答:是的。 –

+0

有幾個角落的情況,在繼承樹中添加'object'可能會破壞事物。添加它,看你的程序是否以奇怪的方式破解。如果是這樣,你做了一些你可能不應該放在第一位的東西:-) – mgilson

回答

2

在Python 2,寫

class MyClass(object): 

就足夠了。或者你切換到Python 3,其中

class MyClass: 

會很好。

繼承列表通常會給出一個基類列表(請參閱爲更高級用途定製類創建),因此列表中的每個項都應評估爲允許子類化的類對象。缺省情況下,沒有繼承列表的類從基類對象繼承;因此

class Foo: 
    pass 

相當於

class Foo(object): 
    pass 

參見:https://docs.python.org/3/reference/compound_stmts.html#class

此外,作爲@Kevin在評論中指出,解決的方法是不平凡的,並可能導致意外使用多重繼承時的行爲:http://python-history.blogspot.com/2010/06/method-resolution-order.html

+0

它可以滿足99%的時間。新風格類的[方法解析順序](http://python-history.blogspot.com/2010/06/method-resolution-order.html)規則已更改,而舊代碼可能依賴於在下面表現不同的角落案例這些變化。 –

+0

@KevinThibedeau,感謝您的鏈接,這是一個有趣的閱讀。 – miku