Python 中的每 class 个常量
Per-class constants in Python
另一个 Python 代码风格问题。
如果我有一些 "constant values"(引用是因为 Python 中没有这样的东西)适用于单个 class,首选:模块级变量,或者class 个变量?
例如假设我们有一个 class 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 文档。他们建议将 class 变量理想地视为 "constant":
Class variables can be used as defaults for instance variables, but
using mutable values there can lead to unexpected results.
https://docs.python.org/2/reference/compound_stmts.html#class-definitions
然而,这并不能真正回答问题。
编辑:正如@JBernardo 指出的那样,这是无关紧要的,因为它指的是可变数据类型,而不是可变变量值。
想法?
谢谢
绝对保留为class的一员,更清晰整洁
您可以有多个 classes,每个都有一个您不干涉的阈值(更不用说对阈值的全局名称空间引用)。阅读 classname.THRESHOLD
会更清楚,因为它表明了意图的实际含义。
而且,它更适合进口。如果你使用
from file import classname
只有当阈值实际位于 class 的命名空间中时,您才会保留阈值,而在导入特定 classes/functions.
时忽略全局命名空间变量
演示:
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
如果它只适用于 class,它应该只对 class 可见。
另一个 Python 代码风格问题。
如果我有一些 "constant values"(引用是因为 Python 中没有这样的东西)适用于单个 class,首选:模块级变量,或者class 个变量?
例如假设我们有一个 class 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 文档。他们建议将 class 变量理想地视为 "constant":
Class variables can be used as defaults for instance variables, but using mutable values there can lead to unexpected results.
https://docs.python.org/2/reference/compound_stmts.html#class-definitions
然而,这并不能真正回答问题。 编辑:正如@JBernardo 指出的那样,这是无关紧要的,因为它指的是可变数据类型,而不是可变变量值。
想法?
谢谢
绝对保留为class的一员,更清晰整洁
您可以有多个 classes,每个都有一个您不干涉的阈值(更不用说对阈值的全局名称空间引用)。阅读 classname.THRESHOLD
会更清楚,因为它表明了意图的实际含义。
而且,它更适合进口。如果你使用
from file import classname
只有当阈值实际位于 class 的命名空间中时,您才会保留阈值,而在导入特定 classes/functions.
时忽略全局命名空间变量演示:
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
如果它只适用于 class,它应该只对 class 可见。