Я в середине написания 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
Я хочу d.x
и d.xValue
в ВСЕГДА печатать то же самое. Если d.x
изменяется, он также должен изменить d.xValue
(и наоборот).
Я могу придумать несколько способов сделать это, но ни один из них не выглядит таким гладко, как хотелось бы:
- Напишите пользовательскую аннотацию
- Используйте аннотацию
@property
и беспорядок с установщиком - Переопределить функции класса
__setattr__
Какой из этих способов лучше? Или есть другой способ? Я не могу не чувствовать, что, если так легко создавать псевдонимы для функций, это должно быть так же легко для любых переменных...
FYI: Я использую Python 2.7.x, а не Python 3.0, поэтому мне нужно решение Python 2.7.x(хотя мне было бы интересно, если Python 3.0 сделает что-то прямое, чтобы решить эту проблему).
Спасибо!