比如下面這段代碼:
# Instantiate FTP handler class
handler = FTPHandler
handler.authorizer = authorizer
FTPHandler后不是應該加括號嗎?
uj5u.com熱心網友回復:
舉個例子你看看哪個是實體化:class clsTest():
y=''
def __init__(self):
self.y='你'
x=clsTest
print(x.y)
x=clsTest()
print(x.y)
uj5u.com熱心網友回復:
加括號的是類的實體化,那不加括號的究竟是什么呢,就像我提出的那段代碼,不懂什么意思
uj5u.com熱心網友回復:
不加括號就不是啟動實體,這個應該和設定一個別名是一樣的handler.authorizer實際上就是FTPHandler類的共享成員
uj5u.com熱心網友回復:
說白了 加括號就是呼叫init函式 不加括號就是不呼叫init函式
uj5u.com熱心網友回復:
你可以列印出兩個實體化的型別,不加括號相當于設定別名,其型別應該是<type 'classobj'>;而加括號才是正確的實體化方法,列印型別應該為<type 'instance'>uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
我個人覺得,python是一個參考機制的,不加括號的相當于是一個變數,指向類所在的空間,有括號是才可以執行uj5u.com熱心網友回復:
class clsTest():
y=''
def __init__(self):
self.y='你'
>>> type(b)
<class 'type'>
>>> c = clsTest()
>>> type(c)
<class '__main__.clsTest'>
上述代碼中, b 是類。
b.authorizer = authorizer
實際上是給類的 attr 賦值。
uj5u.com熱心網友回復:
無法編輯洗掉上一個回帖。。。。。----------
class clsTest():
y=''
def __init__(self):
self.y='你'
>>> b = clsTest
>>> type(b)
<class 'type'>
>>> c = clsTest()
>>> type(c)
<class '__main__.clsTest'>
上述代碼中, b 是類。
b.authorizer = authorizer
實際上是給類的 attr 賦值。
uj5u.com熱心網友回復:
python 一切皆物件,類本身也是物件,不加括號就是物件參考傳遞uj5u.com熱心網友回復:
簡單點說,不加括號就是賦值。1樓的例子中,呼叫x和呼叫clsTest是一樣的。
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
加括號的是實體化了,init 魔法方法會監聽實體化后呼叫,不加括號 ,就是呼叫的類本身。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/85424.html
