簡體   English   中英

Python 3 類創建的最佳實踐

[英]Best practice for Python 3 class creation

在我的研究中,我發現在 Python 3 中這三種類型的類定義是同義詞:

class MyClass:
    pass

class MyClass():
    pass

class MyClass(object):
    pass

但是,我無法找出推薦哪種方式。 我應該使用哪一個作為最佳實踐?

我會說:使用第三個選項:

class MyClass(object):
    pass

明確提到您想要子類化objectPythonZen沒有提到:“顯式優於隱式。”)並且您不會遇到令人討厭的錯誤,以防您(或其他人)運行代碼在 Python 2 中,這些語句是不同的

在 Python 2 中,有 2種類型的類 要使用新樣式,您必須從object顯式繼承。 如果不是,則使用舊式實現。

在 Python 3 中,所有類都隱式地擴展object ,無論您自己是否這么說。

無論如何,您可能希望使用新式類,但如果您的代碼應該與 python 2 和 3 一起使用,則必須顯式繼承自對象:

class Foo(object):
    pass 

跳到另一個答案,是的,Python禪宗指出

顯式優於隱式。

我認為這意味着我們應該避免在代碼中可能出現的混淆,就像我們在一般語言中應該避免的那樣,記住代碼就是交流。

如果您只使用 python 3,並且您的代碼/項目明確聲明,則不會出現混淆,所有沒有顯式繼承的類都會自動從 object 繼承 如果將來由於某種晦澀的原因改變了基類(讓我們想象一下從objectObject ),相同的代碼將起作用。 Python也說

簡單勝於復雜。

(當然,在這個例子中復雜是相當誇張的,但仍然......)

所以如果你的代碼只支持 python3,你應該使用最簡單的形式:

class Foo:
    pass

僅包含()的形式非常無用,因為它沒有提供任何有價值的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM