Estoy escribiendo una API de Python Library y a menudo me encuentro con el escenario en el que mis usuarios quieren múltiples nombres diferentes para las mismas funciones y variables.¿Cómo puedo crear un alias para un atributo miembro no funcional en una clase Python?
Si tengo una clase de Python con la función foo()
y quiero crear un alias para que llamó bar()
, eso es muy fácil:
class Dummy(object):
def __init__(self):
pass
def foo(self):
pass
bar = foo
ahora que puedo hacer esto sin ningún problema:
d = Dummy()
d.foo()
d.bar()
Lo que me pregunto es ¿cuál es la mejor manera de hacer esto con un atributo de clase que es una variable regular (por ejemplo, una cadena) en lugar de una función? Si tuviera este pedazo de código:
d = Dummy()
print d.x
print d.xValue
quiero d.x
y d.xValue
a SIEMPRE impresión de la misma cosa. Si d.x
cambia, también debería cambiar d.xValue
(y viceversa).
puedo pensar en un número de maneras de hacer esto, pero ninguno de ellos parecen tan suave como me gustaría:
- Escribir una anotación personalizada
- Uso del
@property
anotación y meterse con el colocador - Anulación de las funciones
__setattr__
clase
¿Cuál de estas formas es el mejor? ¿O hay otra manera? No puedo evitar sentir que si es tan fácil hacer alias para funciones, debería ser igual de fácil para variables arbitrarias ...
FYI: Estoy usando Python 2.7.x, no Python 3.0, entonces Necesito una solución compatible con Python 2.7.x (aunque me interesaría si Python 3.0 hace algo para abordar esta necesidad directamente).
Gracias!
Considere: "Debería haber una, y preferiblemente solo una, forma obvia de hacerlo". - El Zen de Python – delnan
¿Por qué tus usuarios quieren esto malo malo? –
Se debe principalmente a que mi API de scripting se usa en múltiples subsistemas y dominios, por lo que cambia el vocabulario predeterminado. Lo que se conoce como "X" en un dominio se conoce como "Y" en otro dominio. Además, porque son malos seres humanos. :-) –