【问题标题】:Will __init__ be called automatically for every method call?每次方法调用都会自动调用 __init__ 吗?
【发布时间】:2020-07-15 23:42:04
【问题描述】:
class linkedlist:
    def __init__(self,value):
        self.head={'value':value,'next':None}
        self.tail=self.head
        self.length=1
    def append(self,value):
        self.newnode={'value':value,'next':None}
        self.tail['next']=self.newnode
        self.tail=self.newnode      
        self.length+=1
if __name__=='__main__':
    l=linkedlist(10)
    l.append(5)
    l.append(16)

代码运行良好,但我对 __init__ 的工作方式有疑问。每次函数调用都会调用__init__ 吗?这有点令人困惑,因为我正在更改尾部和头部值。

这里的main函数是如何工作的?

【问题讨论】:

  • 不,__init__ 在创建对象时被调用,“init”代表“initializer”。它最初发生。所以它在这里被调用一次:l=linkedlist(10)
  • 您可以通过将打印添加到__init__ 并查看会发生什么来进行检查。
  • linkedlist 是队列,但您对列表中的每个节点使用未命名的字典 {'value':value,'next':None}。您创建了 1 个队列(并调用了一个 linkedlist.__init__)。每次追加内容时,都会创建一个新字典,并调用其 __init__
  • @juanpa.arrivillaga 然后当我通过l.append(16) 时,我正在更新tail,但head 是如何更新的?
  • self.head 没有得到更新。在.append(16)。但是,当 self.head 恰好引用与 self.tail 相同的对象时,您确实改变了对象(当列表中有一个项目时)

标签: python python-3.x linked-list singly-linked-list


【解决方案1】:

init 函数的主要用途是初始化。当我们创建一个对象时调用它,同时函数中提到的所有值都将被初始化并与对象相关联。了解函数如何工作或整个代码如何按顺序工作的最佳方法,只需尝试在其中添加打印功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 2011-08-31
    • 2023-04-11
    • 2015-11-25
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多