1 回答

TA貢獻1852條經驗 獲得超1個贊
重要的是要確定這與“別名”無關,而是簡單的事實,即這兩段代碼不相等!
讓我們從簡化第二次嘗試開始。我們將簡單地刪除中間變量的使用,以獲得:
from names import NameEmployee
NameEmployee().first_name(x='John')
現在,進行第一次嘗試,讓我們暫時刪除別名:
from names import NameEmployee
NameEmployee.first_name(x='John')
現在您可以清楚地看到差異:第二次嘗試實際上調用(使用這些())構造函數,從而隱式傳遞self新創建的實例。
但是第一次嘗試first_name直接從類調用該方法,而不是類的實例self,因此永遠不會傳遞(NameEmployee().first_name(x='John')相當于NameEmployee.first_name(NameEmployee(), x='John')whileNameEmployee.first_name(x='John')就是它的本質 - 調用first_name而不傳遞self...)。
讓我們進行逆向工程:
我們現在要調用構造函數,如 try 2:
from names import NameEmployee
NameEmployee().first_name(x='John')
現在我們要別名:
from names import NameEmployee as ne
ne().first_name(x='John')
(請記住,別名只是名稱替換)
現在,如果您愿意,可以將對象分離到一個新變量:
from names import NameEmployee as ne
name_employee = ne()
name_employee.first_name(x='John')
添加回答
舉報