在python中定义一个常量对象

时间:2014-07-21 23:11:48

标签: python oop

我在文件factor.py中定义了一个类因子:

class Factor:
    def __init__(self, var, value):
        self.var = var          # hold variable names
        self.value = value  # hold probability values

为了方便和代码清洁,我想定义一个常量变量,并能够将其作为Factor.empty访问

 empty = Factor([], None)

这样做的常见方法是什么?我应该在课堂上定义,还是在外面?我想把它放在课堂定义之外,但之后我就不能把它称为Factor.empty了。

1 个答案:

答案 0 :(得分:5)

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

class Factor:
    ...

Factor.empty = Factor([], None)

但请记住,这不是一个常数"。您可以轻松地执行某些操作来更改empty或其属性的值。例如:

Factor.empty = something_else

或者:

Factor.empty.var.append("a value")

因此,如果您将Factor.empty传递给任何操作它的代码,您可能会发现它不是您想要的空白。


该问题的一个解决方案是每次有人访问Factor时重新创建Factor.empty

class FactorType(type):
    @property
    def empty(cls):
        return Factor([], None)

class Factor(object):
    __metaclass__ = FactorType
    ...

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