重新分配从属实例变量

问题描述 投票:0回答:1

我已经在python中制作了一个Point类,其功能类似于LinkedList,即Point Class的每个实例都指向链中的下一个对象。这些点还存储距离值,即self.next和self之间的距离。我通过更新点列表中每个成员的.next实例变量来排列此链的顺序。但是,这不会更新距离计算。我是否真的需要每次都重新分配.distance实例变量,还是有更好或更优雅的方式?

下面是我的意思的一个好的简单例子。第一个打印语句为0,5,第二个为5,5。我想更新b值,而不必每次都重新分配它们。

class Tester():
    def __init__(self,a):
        self.a = a
        self.b = a+5

Hank = Tester(0)
print(Hank.a,Hank.b)
Hank.a=5
print(Hank.a,Hank.b)

我希望能够更改AND b的值,以便第二个打印语句为5,10。我知道我可以重新分配b,但似乎应该有一个更好的方法。

python-3.x variable-assignment instance-variables
1个回答
0
投票

根据您执行此操作的方式,您不能简单地重新分配a来更新b。您必须重新调用班级以重置b。首次调用该类时,您传入0,将0分配为a的值。然后将b设置为0 + 5。当您为a分配新值时,就不会再运行该类了。如果这样做,您将得到结果。

class Tester():
    def __init__(self,a):
        self.a = a
        self.b = a+5

Hank = Tester(0)
print(Hank.a,Hank.b)
Hank = Tester(5)
print(Hank.a,Hank.b)

结果:

0 5
5 10

或者,您可以执行此操作,或根据所需的限制进行编辑。

class Tester():
    def __init__(self,a):
        self.a = a
        self.b = a+5

i = 0
while i <= 100:
    Hank = Tester(i)
    print(Hank.a, Hank.b)
    i+=5

结果:

0 5
5 10
10 15
15 20
20 25
25 30
30 35
35 40
40 45
45 50
50 55
55 60
60 65
65 70
70 75
75 80
80 85
85 90
90 95
95 100
100 105

如果您有实际的数组,则需要修改代码。

© www.soinside.com 2019 - 2024. All rights reserved.