python 类 - 带括号(实例化)与不带括号(别名)赋值的区别

标题里的描述可能不够准确,以下面这个节点类做说明。

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

如有表述不正确的地方,欢迎大家指正~

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值