Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中定义常量对象_Python_Oop - Fatal编程技术网

在python中定义常量对象

在python中定义常量对象,python,oop,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.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。

如果你想把它放在类定义之外,就这样做:

class Factor:
    ...

Factor.empty = Factor([], None)
但请记住,这不是一个“常数”。您可以轻松地更改
empty
的值或其属性。例如:

Factor.empty = something_else
或:

因此,如果您将
Factor.empty
传递给任何操纵它的代码,您可能会发现它没有您想要的那么空


解决这个问题的一个方法是每次有人访问
因子时重新创建一个新的空
因子。empty

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

class Factor(object):
    __metaclass__ = FactorType
    ...
这会将
空的
属性添加到
因子
类中。您可以安全地使用它,因为每次访问
empty
,都会创建一个新的空
系数

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

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