[英]Python method not affecting instance of Class
我的问题在del_node
方法中,尽管设置了self = self.next
,但这似乎对进行调用的类的实例没有影响。
例如,如果我有一个链表L = 1-> 2-> 3-> 4
调用L.del_node(x)
,其中x
是第一个节点以外的其他任何节点,只需以这种方式进行调用L.del_node(1)
,但是,如果我要调用L.del_node(1)
,则必须将其称为L = L.del_node(1);
我假设这与不更改实例的任何值有关(例如,重置self.data
/ next
等)。
我问是因为我感到困惑,为什么当self.data = ...
时,语句self = self.next
似乎不影响实例。
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)
self = something
不会改变对象。 就像Python中的其他地方一样,它仅重新绑定了本地名称self
。 (Python对名称self
没什么特别的-它仅按惯例使用。方法只是普通的函数, self
只是普通的参数。这就是传递self
。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.