亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

類型錯誤:缺少 1 個必需的位置參數:“self”與導入期間作為別名

類型錯誤:缺少 1 個必需的位置參數:“self”與導入期間作為別名

飲歌長嘯 2023-12-12 21:21:13
self我是在另一個 python 文件中定義和調用函數的新手。我正在使用Python 3.7。假設我有兩個 python 文件,一個包含類(name.py),另一個在另一個文件(test.py)中調用此類函數。我試圖理解為什么 python 在 Try#1 中顯示錯誤,但在 #2 中卻沒有顯示錯誤?Try#1 定義為別名,但這有什么作用呢?好像沒有初始化吧?具有類函數的主文件:name.pyclass NameEmployee:    def __init__(self):        pass    def first_name(self,x):        return print('Hello ',x,'!')要運行的文件:test.py嘗試#1:不起作用from names import NameEmployee as nene.first_name(x = 'John') 結果 --> TypeError:first_name() 缺少 1 個必需的位置參數:'self'嘗試#2:工作from names import NameEmployeene = NameEmployee()ne.first_name(x = 'John')結果 --> 你好約翰!
查看完整描述

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')


查看完整回答
反對 回復 2023-12-12
  • 1 回答
  • 0 關注
  • 197 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號