我在文件factor.py中定义了一个类因子:
class Factor:
def __init__(self, var, value):
self.var = var # hold variable names
self.value = value # hold probability values
Run Code Online (Sandbox Code Playgroud)
为了方便和代码清洁,我想定义一个常量变量,并能够将其作为Factor.empty访问
empty = Factor([], None)
Run Code Online (Sandbox Code Playgroud)
这样做的常用方法是什么?我应该在课堂上定义,还是在外面?我想把它放在类定义之外,但那时我就不能把它称为Factor.empty了.
如果你想在类定义之外,只需这样做:
class Factor:
...
Factor.empty = Factor([], None)
Run Code Online (Sandbox Code Playgroud)
但请记住,这不是一个"常数".您可以轻松地执行某些操作来更改empty其属性或其属性的值.例如:
Factor.empty = something_else
Run Code Online (Sandbox Code Playgroud)
要么:
Factor.empty.var.append("a value")
Run Code Online (Sandbox Code Playgroud)
因此,如果您传递Factor.empty给任何操纵它的代码,您可能会发现它不是您想要的空.
该问题的一个解决方案是每次有人访问时重新创建一个新的空:FactorFactor.empty
class FactorType(type):
@property
def empty(cls):
return Factor([], None)
class Factor(object):
__metaclass__ = FactorType
...
Run Code Online (Sandbox Code Playgroud)
这会empty为Factor类添加属性.您可以安全地使用它,因为每次访问时都会创建empty一个新的空白Factor.