我在某些代碼上跑了pylint,並對老式班級抱怨。將舊式班級改寫爲新班級
我可以通過簡單地改變糾正這個:
class MyClass:
到:
class MyClass(object):
或者是有什麼更多的參與?
我在某些代碼上跑了pylint,並對老式班級抱怨。將舊式班級改寫爲新班級
我可以通過簡單地改變糾正這個:
class MyClass:
到:
class MyClass(object):
或者是有什麼更多的參與?
在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
它可以滿足99%的時間。新風格類的[方法解析順序](http://python-history.blogspot.com/2010/06/method-resolution-order.html)規則已更改,而舊代碼可能依賴於在下面表現不同的角落案例這些變化。 –
@KevinThibedeau,感謝您的鏈接,這是一個有趣的閱讀。 – miku
這是非常多的。 – BrenBarn
簡單的回答:是的。 –
有幾個角落的情況,在繼承樹中添加'object'可能會破壞事物。添加它,看你的程序是否以奇怪的方式破解。如果是這樣,你做了一些你可能不應該放在第一位的東西:-) – mgilson