我正在编写一个Python库API,我经常遇到这样的场景,我的用户需要为相同的函数和变量指定多个不同的名称。如何在Python类中为非函数成员属性创建别名?
如果我有一个功能foo()
Python类,我想打一个别名,它叫bar()
,这是超级简单:
d = Dummy()
d.foo()
d.bar()
:
class Dummy(object):
def __init__(self):
pass
def foo(self):
pass
bar = foo
现在我可以毫无问题做到这一点
我想知道的是什么是最好的方式来做到这一点与类属性是一个常规变量(如字符串)而不是一个函数?如果我有这样一段代码:
d = Dummy()
print d.x
print d.xValue
我想d.x
和d.xValue
到ALWAYS打印同样的事情。如果d.x
发生变化,它也应该更改d.xValue
(反之亦然)。
我能想到的一些方法可以做到这一点,但他们都不顺利,因为我想:
- 编写自定义注释
- 使用
@property
注释和乱用二传手 - 重写
__setattr__
类功能
以下哪种方法是最好的?还是有另一种方式?我不禁感到,如果为函数设置别名是如此容易,对任意变量应该也是一样容易......
仅供参考:我使用Python 2.7.x,而不是Python 3.0,所以我需要一个兼容Python 2.7.x的解决方案(尽管如果Python 3.0能够直接解决这个需求,我会感兴趣)。
谢谢!
考虑:“应该有一个 - 最好只有一个 - 明显的方法来做到这一点。” - Python的禅宗 – delnan 2010-10-25 18:28:39
为什么你的用户想要这个糟糕的坏事? – 2010-10-25 21:06:46
这主要是因为我的脚本API跨多个子系统和域使用,所以默认词汇表会改变。一个域中称为“X”的在另一个域中被称为“Y”。另外,因为他们是不好的人。 :-) – 2010-10-25 21:45:45