重新分配从属实例变量

时间:2019-10-22 17:09:21

标签: python-3.x variable-assignment instance-variables

我在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,但是似乎应该有更好的方法。

1 个答案:

答案 0 :(得分:0)

对于指针和链接列表,您的答案似乎在这里:https://www.codefellows.org/blog/implementing-a-singly-linked-list-in-python/

通常:

一旦您输入要分配给 a 的值, a b 都会被初始化。由于您的课程不会遍历值,因此 b 的值不会仅仅因为重新分配了 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

最后,您没有按照帖子的建议打印逗号。您需要将它们添加到字符串中。一个示例是使用f字符串更新print语句:

print(f"{Hank.a}, {Hank.b}")

结果:

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