我的问题是在del_node
方法中,尽管设置了self = self.next
,但这似乎对正在进行调用的类的实例没有影响。
如果我有一个链表L = 1 - > 2 - > 3 - > 4
调用L.del_node(x)
,其中x
是除第一个以外的任何节点,
如果我打电话,只需按这种方式拨打电话就行了
L.del_node(1)
我必须将其称为L = L.del_node(1);
我假设必须这样做
没有改变实例的任何值,因为我和其他人一样(例如重置
self.data
/ next
等。)
我问,因为我很困惑为什么声明self = self.next
似乎不会影响
self.data = ...
的实例。
class Node():
def __init__(self,data = None):
self.data = data
self.next = None
def add_node(self,data):
if self.data == None:
self.data = data
else:
while self.next != None:
self = self.next
self.next = Node(data)
def del_node(self,data):
if self.data == None:
print "ERROR: Null list"
return self
elif self.data == data:
if self.next == None:
self.data = None
return self
else:
#this seems to be the only case where
#instance = instance.del_node() matters (why?)
#opposed to just instance.del_node()
return self.next
start = self
prev = self
self = self.next
while self.next != None:
if self.data == data:
prev.next = self.next
return start
prev = self
self = self.next
if self.data == data:
prev.next = None
return start
else:
print "ERROR: value not in list"
return start
def get_len(self):
length = 0
if self.data == None:
return length
while self.next != None:
length += 1
self = self.next
return length + 1
def __str__(self):
string = ''
while self.next != None:
string += str(self.data) + ' -> '
self = self.next
return string + str(self.data)
答案 0 :(得分:3)
self = something
不会更改对象。就像Python中的其他地方一样,它只是重新绑定本地名称self
。 (关于名称self
,Python并没有什么特别之处 - 它只被惯例使用。方法只是一个普通的函数而self
只是一个普通的参数。它是如何通过self
传递的。)