变量到特定表达式的python绑定

2024-04-24 05:11:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个有文件的简单应用程序常量.py包含所有配置,如下所示

x = y

在程序执行过程中,y的值发生了变化,我希望xo的值也能自动更新,这可以作为绑定引用,我如何实现这一点


Tags: 文件py应用程序过程常量xo程序执行
3条回答

如果更改值(对象)本身,则对它的所有引用都将更新:

>>> a = []
>>> b = a  # b refers to the same object a is refering right now
>>> a.append('foo')
>>> print b
['foo']

但是,如果将名称指向其他对象,则其他名称仍将引用之前引用的对象:

^{pr2}$

这就是python的工作原理。名称只是对对象的引用。可以使名称引用另一个名称引用的同一对象,但不能使名称引用另一个名称。使用=运算符(a = 15)的名称属性会更改a所指的内容,因此它不会影响其他名称。在

在Python中,变量名指向值。x=y告诉Python变量名x应该指向y当前指向的值。在

更改y时,变量名y指向新值,而变量名x仍指向旧值。在

使用纯变量名无法实现所需的效果。在

我喜欢KennyTM的建议,将x定义为一个函数,因为它明确指出x的值需要运行一些代码(查找y的值)。在

但是,如果您想维护统一的语法(使所有常量都能以相同的方式访问),那么您可以使用一个带有属性(调用getter和setter函数的属性)的类:

在常量.py公司名称:

class BunchOConstants(object):
    def __init__(self, **kwds):
        self.__dict__.update(kwds)
    @property
    def x(self):
        return self.y
    @x.setter
    def x(self,val):
        self.y=val
const=BunchOConstants(y=10,z='foo')

你的脚本.py公司名称:

^{pr2}$

在这里您可以改变“常数”y:

^{3}$

“常数”x也会改变:

print(const.x)
# bar

您也可以更改x

const.x='foo'

而且y也发生了变化:

print(const.y)
# foo

如果您的配置值在类中,可以执行以下操作:

>>> class A(object):
...     a = 4
...     @property
...     def b(self):
...         return self.a
... 

然后,每次访问b时,它都会返回a的值

相关问题 更多 >