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

2024-06-08 11:59:35 发布

您现在位置:Python中文网/ 问答频道 /正文

正常方式:

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

    def another_method(self):
        self.a.b.c = self.a.b.c * 10

别名方法:

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

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

如何在Python中实现别名?我想这样做的原因是为了减少由于变量名太长而造成的混乱。这是一个多线程环境,因此简单地复制到本地变量是行不通的。


Tags: of方法selfaninitvaluedef方式
2条回答

解决方法是使用getter和setter方法-幸运的是Python有the ^{} builtin来隐藏这一点的丑陋:

class A:
    def __init__(self):
        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 another_method(self):
        self.aliased *= 10  # Updates value of self.a.b.c

通常,像self.a.b.c这样嵌套很深的属性是设计不好的一个标志-通常您不希望类必须知道3个关系之外的对象-这意味着对给定项的更改可能会在整个代码基中引起问题。最好是尝试让每个类处理它周围的类,而不是进一步。

你很困惑。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']

相关问题 更多 >