關於python中類的相關說明,類名直接調用方法會報錯


今天在寫腳本的時候,發現在對類直接調用方法這種寫法,一直提示傳參錯誤,然后百度后發現這個解釋應該是最合理的,為什么類名直接調用方法會報錯

通過前面的學習,類方法大體分為 3 類,分別是類方法、實例方法和靜態方法,其中實例方法用的是最多的。我們知道,實例方法的調用方式其實有 2 種,既可以采用類對象調用,也可以直接通過類名調用。

通常情況下,我們習慣使用類對象調用類中的實例方法。但如果想用類調用實例方法,不能像如下這樣:

 

 

運行上面代碼,程序會報出如下錯誤:

Traceback (most recent call last):
  File "D:\python3.6\demo.py", line 5, in <module>
    CLanguage.info()
TypeError: info() missing 1 required positional argument: 'self'

其中,最后一行報錯信息提示我們,調用 info() 類方式時缺少給 self 參數傳參。這意味着,和使用類對象調用實例方法不同,通過類名直接調用實例方法時,Python 並不會自動給 self 參數傳值。

讀者想想也應該明白,self 參數需要的是方法的實際調用者(是類對象),而這里只提供了類名,當然無法自動傳值。

因此,如果想通過類名直接調用實例方法,就必須手動為 self 參數傳值。例如修改上面的代碼為

 

 

再次運行程序,結果為:

我正在學 Python

可以看到,通過手動將 clang 這個類對象傳給了 self 參數,使得程序得以正確執行。實際上,這里調用實例方法的形式完全是等價於 clang.info()。

值得一提的是,上面的報錯信息只是讓我們手動為 self 參數傳值,但並沒有規定必須傳一個該類的對象,其實完全可以任意傳入一個參數,例如:

 

 

運行結果為:

zhangsan 正在學 Python

可以看到,"zhangsan" 這個字符串傳給了 info() 方法的 self 參數。顯然,無論是 info() 方法中使用 self 參數調用其它類方法,還是使用 self 參數定義新的實例變量,胡亂的給 self 參數傳參都將會導致程序運行崩潰。

總的來說,Python 中允許使用類名直接調用實例方法,但必須手動為該方法的第一個 self 參數傳遞參數,這種調用方法的方式被稱為“非綁定方法”。

用類的實例對象訪問類成員的方式稱為綁定方法,而用類名調用類成員的方式稱為非綁定方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM