标题里的描述可能不够准确,以下面这个节点类做说明。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
不带括号的赋值
对于:
a=ListNode
相当于a指向了ListNode类,所以a与ListNode类相等。(这种描述可能不够准确,欢迎大神指正!)下面以实例说明:
输入:
a=ListNode
print(a)
print(a==ListNode)
a.val=1
print(ListNode.val)
输出:
<class '__main__.ListNode'>
True
1
从以上实例可以看出,a相当于指向了ListNode类,二者相等。
所以当a.val=1后,这个类的初始val属性等于1(不再是原来的x),List.val等于1
带括号的赋值
输入:
b=ListNode(3)
print(b)
print(ListNode.val)
输出:
<__main__.ListNode object at 0x0000000004B17AC8>
1
b为ListNode类的一个实例化对象。
而由于上文中已经把ListNode的val属性设置为1,所以x=3不再起作用。
下面附上一段连续的代码段,方便大家理解:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
c=ListNode(3)
print('output_1:{}'.format(c.val))
a=ListNode
print('output_2:{}'.format(a))
print('output_3:{}'.format(a==ListNode))
a.val=1
print('output_4:{}'.format(ListNode.val))
b=ListNode(3)
print('output_5:{}'.format(b))
print('output_6:{}'.format(ListNode.val))
输出:
output_1:3
output_2:<class '__main__.ListNode'>
output_3:True
output_4:1
output_5:<__main__.ListNode object at 0x0000000004B07DA0>
output_6:1
如有表述不正确的地方,欢迎大家指正~