在python中定义一个常量对象

Dzu*_*yen 2 python oop

我在文件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了.

Jam*_*urn 5

如果你想在类定义之外,只需这样做:

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)

这会emptyFactor类添加属性.您可以安全地使用它,因为每次访问时都会创建empty一个新的空白Factor.