python 創建類和為什么類方法中self形參必不可少?


我們觀察到在類中定義方法時,都帶有self形參,為何必須在方法中定義形參self呢?

因為Python調用方法創建類實例時,將自動傳入實參self。每個與類相關聯的方法調用都自動傳遞實參self,他是一個指向實例本身的引用,讓實例能夠訪問類中的屬性和方法。

以self為前綴的變量都可供類中的所有方法使用,我們還可以通過類的任何實例來訪問這些變量。

class Dog():
    '''一次模擬小狗的簡單嘗試'''
    
    def __init__(self, name, age):
        '''初始化屬性name和age'''
        self.name = name
        self.age = age
        
    def sit(self):
        '''模擬小狗被命令時蹲下'''
        print(self.name.title() + "is now sitting.")
         
    def roll_over(self):
        '''模擬小狗被命令時打滾'''
        print(self.name.title() + " rolled over!")       
        

這里注意的地方很多,我們慢慢來說:

根據約定,在Python中,首字母大寫的名稱指的是類。這個類定義中的括號是空的,因為我們要從空白創建這個類。

(1)方法__init__()

類中的函數稱為方法;__init__()是一個特殊的方法,每當你根據Dog類創建新實例時,Python會自動運行它。在這個方法的名稱中,開頭和末尾各有兩個下划線,這是一種約定,旨在避免Python默認方法和普通方法發生名稱沖突。

方法__init__()定義成包含三個形參:self、name和age。在這個方法的定義中,形參self必不可少,還必須位於其他形參的前面。為何必須在方法定義中包含形參self呢?因為Python調用這個__init__()方法來創建Dog實例時,將自動傳入實參self。每個與類相關聯的方法調用都自動傳遞實參self,它是一個指向實例本身的引用,讓實例能夠訪問類中的屬性和方法。我們創建Dog實例時,Python將自動調用Dog類的方法__init__().我們將通過實參向Dog()傳遞名字和年齡;self會自動傳遞,因此我們不需要傳遞它。每當我們根據Dog類創建實例時,都只需給最后兩個形參(name和age)提供值。

sit和roll_over中定義的兩個變量都有前綴self。以self為前綴的變量都可供類中的所有方法使用,我們還可以通過類的任何實例來訪問這些變量。self.name=name獲取存儲在形參name中的值,並將其存儲到變量name中,然后該變量被關聯到當前創建的實例。self.age=age的作用與此類似。像這樣可以通過實例訪問的變量稱為屬性。

 


免責聲明!

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



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