You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类中方法定义顺序是否重要?LinkedList类的两个运行疑问

关于Python LinkedList类的两个疑问解答

问题1:为什么在LinkedList的__init__方法中调用append方法,即便append定义在__init__之后,代码运行也不报错?

Python处理类定义时,会先把类内所有方法(无论定义顺序)都加载到类的命名空间中。当你实例化对象执行__init__时,append方法已经是类的成员方法,完全可以正常调用。这和普通函数必须先定义再调用的逻辑不同,类的方法是在类整体加载完成后才可供实例调用,所以方法定义顺序不影响调用。

问题2:执行my_linked_list = Linkedlist(3, 2, 7, 9)时,输出顺序是test1、test2、test2、test2、test1,而非预期的test2×3+test1,原因是什么?

看代码逻辑就能明白:
当传入多个参数时,init__进入else分支,首先执行self.__init__(value[0])——也就是递归调用__init__方法,传入单个参数3。这个递归的__init__会执行len(value)==1的逻辑,最后打印test1,这就是第一个输出的test1。
递归返回后,回到外层的__init
,循环调用append方法传入2、7、9,每个append执行时都会打印test2,所以这里输出三个test2。
最后外层的__init__执行完毕,打印最后一个test1。
整个流程的输出顺序就是:递归__init__的test1 → 三次append的test2 → 外层__init__的test1。

相关代码

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None


class Linkedlist:
    def __init__(self, *value):
        if len(value) == 1:
            new_node = Node(value[0])
            self.head = new_node
            self.tail = new_node
            self.lenght = 1
        else:
            self.__init__(value[0])
            other_values = value[1::]
            for i in other_values:
                self.append(i)
        print('test1')


    def append(self, *value):
        for i in value:
            new_node = Node(i)
            if self.head == None:
                self.head = new_node
                self.tail = new_node
            else:
                self.tail.next = new_node
                self.tail = new_node
                self.lenght += 1
            print('test2')

        return True

执行代码

my_linked_list = Linkedlist(3, 2, 7, 9)

内容的提问来源于stack exchange,提问作者G_G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:10:30