为什么一个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
方法,而不是它的实例
刚开始接触链表,用链表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
方法,而不是它的实例