В именах переменных Python указываются значения. x=y
сообщает Python, что имя переменной x
должно указывать на значение, на которое в данный момент указывает y
.
Когда вы изменяете y
, тогда имя переменной y
указывает на новое значение, а имя переменной x
все еще указывает на старое значение.
Вы не можете достичь того, чего хотите, с простыми именами переменных.
Мне нравится предложение KennyTM определить x
как функцию, поскольку оно явно указывает, что значение x
требует запуска некоторого кода (поиск значения y).
Однако, если вы хотите поддерживать единый синтаксис (делая все константы доступными одинаково), вы можете использовать класс со свойствами (атрибуты, которые вызывают функции получения и установки):
Constants.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')
Ваш script.py:
import Constants
const=Constants.const
print(const.y)
# 10
print(const.x)
# 10
Здесь вы меняете «постоянную» y:
const.y='bar'
И «константа» х тоже изменяется:
print(const.x)
# bar
Вы также можете изменить x
,
const.x='foo'
и y
тоже меняются:
print(const.y)
# foo