簡體   English   中英

Python:勸阻靜態變量?

[英]Python: are static variables discouraged?

我正在閱讀有關靜態變量(即類變量),靜態方法,類方法以及所有這些變量的細微差別。 在像C ++這樣的語言中, 由於許多IMO令人信服的理由,通常強烈建議不要使用靜態變量 我只是好奇,如果Python社區對靜態變量的已知位置不鼓勵。 Google Python樣式指南似乎沒有靜態變量的pro / con位置

在Python語言中,不鼓勵使用靜態變量(即有不良的代碼味道)?

谷歌C ++風格指南的聲明“[靜態變量]導致難以發現的錯誤”當然似乎不僅適用於C ++語言,也適用於Python語言。

在某些語言中,例如Java,靜態變量可能會導致可測試性問題,因為它們不容易被模擬。 這與Python中的情況不同。

但是,靜態和類變量的好處較少,因為當您擁有不需要訪問特定實例成員的值或函數時,您可以在模塊級別定義它們,並使用它們而不引用class - Java等語言中沒有的奢侈品。

所以我會說static本身並不是代碼味道。 但如果你的一半變量是static那么我會詢問一些關於你對OO設計理解的問題。

您正在閱讀的C ++資源正在討論具有靜態存儲持續時間的類類型的變量。 那些與靜態變量不同; 例如,以下變量也具有靜態存儲持續時間:

Example x;

namespace whatever {
    Example y;
}

void foo() {
    static Example z;
}

這些在C ++中是危險的,因為它們被初始化和銷毀​​的順序是不可預測的並且容易出錯。


Python沒有靜態存儲持續時間的變量。 它根本沒有存儲持續時間。 它具有(模塊)全局變量和靜態變量,但它們的初始化順序比C ++中的定義要精確得多。 除非你有循環導入,否則不太可能發生C ++問題,即使這樣,循環導入也是問題,而不是全局變量或靜態變量。


也就是說,可變的全局狀態,例如你在程序過程中發生變異的全局變量或靜態變量,對於語言無關的原因是不好的。 這與C ++具有靜態存儲持續時間的問題完全不同。 你不打算變異的全局變量和靜態變量通常很好。

暫無
暫無

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

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