1. 程式人生 > >調用類時,加括號和不加括號的區別

調用類時,加括號和不加括號的區別

沒有 list 進行 none () 自己的 tno ext 根據

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) # 你

調用類時,加括號和不加括號的區別