[英]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.