调用类时,加括号和不加括号的区别

Posted chengege

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用类时,加括号和不加括号的区别相关的知识,希望对你有一定的参考价值。

class ListNode:
def __init__(self, x):
self.val = x
self.next = None


a = ListNode
a.val = 1
print(ListNode.val) # 返回 1

class ListNode2:
val = 1
def __init__(self, x):
self.val = x
self.next = None

print(ListNode2.val) # 返回 1

b = ListNode(3) # 这是在实例化对象,调用 init 对 对象本身定制 val 的值
print(b.val) # 返回 3

print(id(ListNode)) # 1324811791128
print(id(a)) # 1324811791128
print(id(b)) # 1324843200864




调用类时,不加括号。那么这个变量a 或者 b 都将时类本身。 进而对他进行的任何操作都是对类本身进行操作。 也不会经过__init__。
对val进行操作的时候, 也就是给类 增加了一个属性。

而加上括号之后。那么变量b 就是类实例化出的对象。这是再调用val的时候。 根据类的查找原则, 对象会先到自己的命名空间中找,也就是__init__定制的内容中。
如果找到了val就返回。也就是 3 了。
如果__init__ 中没有定制val这个属性。那么就会去类中找,就会返回 1 了!

下面这个例子,更清楚的反映了。加括号就是调用__init__
class clsTest():
y = None
def __init__(self):
self.y = ‘你‘

x = clsTest
print(x.y) # None

x = clsTest()
print(x.y) # 你












































以上是关于调用类时,加括号和不加括号的区别的主要内容,如果未能解决你的问题,请参考以下文章

Python调用函数加括号和不加括号的区别

Mysql的Where条件,加括号和不加括号的区别。求指导。。。。。

typeof加括号和不加括号的区别

每日一练 for循环 break 加括号和不加括号的区别 break跳出循环

关于vue ,v-on 绑定事件时,函数名加括号和不加括号的区别

js中new创建对象时带括号和不带括号有啥区别