Я нахожусь в процессе написания API библиотеки Python, и я часто сталкиваюсь со сценарием, когда моим пользователям требуется несколько разных имен для одних и тех же функций и переменных.
Если у меня есть класс Python с функцией foo ()
, и я хочу создать для него псевдоним bar ()
, это очень просто:
class Dummy(object):
def __init__(self):
pass
def foo(self):
pass
bar = foo
Теперь я могу сделать это без проблем:
d = Dummy()
d.foo()
d.bar()
Мне интересно, как лучше всего сделать это с помощью атрибута класса, который является обычной переменной (например, строкой), а не функцией? Если бы у меня был этот фрагмент кода:
d = Dummy()
print d.x
print d.xValue
Я хочу, чтобы dx
и d.xValue
в ВСЕГДА печатали одно и то же. Если dx
изменится, он также должен изменить d.xValue
(и наоборот).
Я могу придумать несколько способов сделать это, но ни один из них не кажется сколь угодно гладко:
@property
и возитесь с сеттером __ setattr __
Какой из этих способов лучше? Или есть другой способ? Я не могу не чувствовать, что, если так легко создавать псевдонимы для функций, это должно быть так же легко и для произвольных переменных ...
К вашему сведению: я использую Python 2.7.x, а не Python 3.0, поэтому я требуется решение, совместимое с Python 2.7.x (хотя мне было бы интересно, сделает ли Python 3.0 что-нибудь для непосредственного удовлетворения этой потребности).
Спасибо!