簡體   English   中英

Python中的每類常量

[英]Per-class constants in Python

另一個Python代碼樣式問題。

如果我有一些“常量值”(引用因為Python中沒有這樣的東西)適用於單個類,那么首選:模塊級變量還是類變量?

例如假設我們有一個類Counter ,當達到一個恆定的閾值時會做某事,這是首選的?

class Counter(object):
    THRESHOLD = 6
    ...

    def increment(self):
        self.val += 1
        if self.val == Counter.THRESHOLD:
            do_something()

要么:

COUNTER_THRESHOLD = 6

class Counter(object):
    ...
    def increment(self):
        self.val += 1
        if self.val == COUNTER_THRESHOLD:
            do_something()

我設法挖掘出來的唯一一件事就是來自Python文檔。 他們建議將類變量理想地視為“常量”:

類變量可以用作實例變量的默認值,但使用可變值可能會導致意外結果。

https://docs.python.org/2/reference/compound_stmts.html#class-definitions

但是,這並沒有真正回答這個問題。 編輯:正如@JBernardo指出的那樣,這是無關緊要的,因為它指的是可變數據類型,而不是可變變量值。

思考?

謝謝

絕對保持它作為班級成員,它更清晰,更整潔。

您可以擁有多個類,每個類都具有您不會干擾的閾值(更不用說對閾值的全局命名空間引用)。 讀取classname.THRESHOLD更清楚,因為它表明了意圖的實際意義。

但是,進口也好得多。 如果你使用

from file import classname

如果它實際上在類的命名空間中,您將只保留閾值,而在導入特定的類/函數時,將忽略全局命名空間變量。

展示:

Classy.py

glob = "global"

class ClassName:
    name = "Class Name"

Otherfile.py

from classy import ClassName

print ClassName.name
print glob

運行Otherfile.py的結果

Class Name

Traceback (most recent call last):
  File "C:\Users\person\Desktop\otherfile.py", line 4, in <module>
    print glob
NameError: name 'glob' is not defined

如果它僅適用於類,則它應僅對類可見。

暫無
暫無

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

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