如何在Python中为变量创建别名?

时间:2012-06-15 11:35:24

标签: python variables alias

正常方式

class A:
    __init__():
     self.a.b.c = 10

    anotherMethod():
      self.a.b.c = self.a.b.c * 10

别名方法

class A:
    __init__():
     self.a.b.c = 10         
     alias self.aliased = self.a.b.c # Creates an alias 

    anotherMethod():
      self.aliased = self.aliased * 10 # Updates value of self.a.b.c

如何在Python中实现别名?我想要做的是减少由于长变量名称引起的混乱。 这是一个多线程环境。所以简单地复制到本地变量是行不通的。

3 个答案:

答案 0 :(得分:18)

解决这个问题的方法是使用getter和setter方法 - 幸运的是Python有the property() builtin来隐藏它的丑陋。

class A:
    def __init__():
     self.a.b.c = 10

    @property
    def aliased(self):
        return self.a.b.c

    @aliased.setter
    def aliased(self, value):
         self.a.b.c = value

    def anotherMethod():
      self.aliased *= 10 # Updates value of self.a.b.c

正如其他人所指出的那样,通常这是设计糟糕的标志 - 您通常不希望类必须知道有三种关系的对象 - 这意味着对给定项目的更改可能会导致整个代码出现问题基础。尝试让每个类处理它周围的类是一个更好的主意,而不是更进一步。

答案 1 :(得分:8)

你很困惑。 Python不会复制任何隐含的内容,它只存储引用,因此无论您在哪个环境中它都可以使用。

# this creates a list and stores a *reference* to it:
really_really_long_variable_name = [] 
# this creates another new reference to the *same list*. There's no copy.
alias = really_really_long_variable_name

alias.append('AIB')
print really_really_long_variable_name

您将获得['AIB']

答案 2 :(得分:1)

您可以使用descriptors获得所需的行为,但仅适用于成员变量。