繁体   English   中英

Python方法不影响Class实例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM