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