为什么一个class要输入两次对象?

Why is it necessary to enter the object twice for a class?

刚开始接触链表,用链表class和节点对象写了一些基本函数。调用一个函数时,似乎我必须在链表对象中输入两次,我认为我做错了什么。要在尾部添加一个值为“b”的新节点,我必须调用 sample_list.add_tail_node(sample_list, "b"),当我认为它应该是 sample_list.add_tail_node("b") 时,因为指定 sample_list 两次有什么意义

class LinkedList:

def __init__(self):
    self.head = None

def add_tail_node(self, val: int):
    node = self.head
    while True:
        if node.next is None:
            node.next = Node(val)
            break
        node = node.next

class Node:
def __init__(self, val):
    self.val = val
    self.next = None
sample_list = LinkedList
sample_list.head = Node("a")
sample_list.add_tail_node(sample_list, "b")

您正在为此处的变量分配 class 引用

sample_list = LinkedList

当你需要调用一个class时,它会创建一个实例

sample_list = LinkedList()
为了更好的理解

当你打电话时

sample_list.head = Node("a")

您实际上是将 head 分配给 class 本身

并且使用class调用对象方法时,需要先提供class对象实例变量(self值),从实例调用方法时自动适配对象

sample_list.add_tail_node(sample_list, "b")

这实际上会处理 class 本身的 add_tail_node 方法,而不是它的实例