您好,登錄后才能下訂單哦!
這篇“Python類屬性和方法如何調用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Python類屬性和方法如何調用”文章吧。
在面向對象程序設計中,把數據以及對數據的操作封裝在一起,組成一個整體(對象),不同對象之間通過消息機制來通信或者同步。對于相同類型的對象進行分類、抽象后,得出共同的特征而形成了類。
類的抽象具體包括兩個方面:
1.數據抽象:描述某類對象共有的屬性或狀態。
2.過程抽象:描述某類對象共有的行為或功能操作。
在python中,使用類來定義同一種類型的對象。類是廣義的數據類型,能夠定義復雜數據的特性,包括:
1.靜態特性(即數據抽象):創建類時用變量形式表示對象特征的成員稱為屬性(數據成員)。
2.動態特性(即行為抽象,也就是對數據的操作方法):用函數形式表示對象行為的成員稱為成員方法,數據成員和成員方法統稱為類的成員。
類是實現代碼復用和設計復用的一個重要方法,封裝、繼承、多態是面向對象程序設計的三個要素。
類是生成對象的抽象模板,對象是根據類創建出來的一個個具體的實例。
Python使用class關鍵字來定義類,class關鍵字之后是一個空格,接下來是類的名字,如果派生自其它基類的話則需要把所有父類放到一對圓括號中并使用逗號分隔,然后是一個冒號,最后換行并定義類的內部實現。
類名的首字母一般要大寫。
class Car(object): #定義一個類,派生自object類(所有類的祖先,定義類時不存在其他父類就寫object) can_move=True #定義類屬性 def infor(self): #定義成員方法 print("This is a car")
類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self(self代表類的實例,而非類;self 不是 python 關鍵字,我們把他換成其他也是可以正常執行的)。
定義了類之后,就可以用來實例化對象,并通過“對象名.成員”的方式來訪問其中的數據成員或成員方法。
>>>spring=Bird() #實例化對象 >>>print(Bird.have_feather) #通過類名調用屬性 >>>print(Bird.have_head) #通過對象名調用屬性 >>>spring.move() #通過對象名調用方法 >
類方法大體分為 3 類,分別是類方法、實例方法和靜態方法,其中實例方法用的是最多的。我們知道,實例方法的調用方式其實有 2種,既可以采用類對象調用,也可以直接通過類名調用。
通常情況下,我們習慣使用類對象調用類中的實例方法。但如果想用類調用實例方法,不能像如下這樣:
class Study: def info(self): print("學 Python") #通過類名直接調用實例方法 Study.info()
運行上面代碼,程序會報出如下錯誤:
Traceback (most recent call last):
File "D:\python3.6\demo.py", line 5, in <module>
Study.info()
TypeError: info() missing 1 required positional argument: 'self'
其中,最后一行報錯信息提示我們,調用 info() 類方式時缺少給 self 參數傳參。這意味著,和使用類對象調用實例方法不同,通過類名直接調用實例方法時,Python 并不會自動給 self 參數傳值。
讀者想想也應該明白,self 參數需要的是方法的實際調用者(是類對象),而這里只提供了類名,當然無法自動傳值。
因此,如果想通過類名直接調用實例方法,就必須手動為 self 參數傳值。例如修改上面的代碼為:
class Study: def info(self): print("學 Python") clang = Study() #通過類名直接調用實例方法 Study.info(clang)
再次運行程序,結果為:
學 Python
可以看到,通過手動將 clang 這個類對象傳給了 self 參數,使得程序得以正確執行。實際上,這里調用實例方法的形式完全是等價于 clang.info()。
值得一提的是,上面的報錯信息只是讓我們手動為 self 參數傳值,但并沒有規定必須傳一個該類的對象,其實完全可以任意傳入一個參數,例如:
class Study: def info(self): print(self,"學 Python") #通過類名直接調用實例方法 Study.info("zhangsan")
運行結果為:
zhangsan 學 Python
可以看到,“zhangsan” 這個字符串傳給了 info() 方法的 self 參數。顯然,無論是 info() 方法中使用 self 參數調用其它類方法,還是使用 self 參數定義新的實例變量,胡亂的給 self 參數傳參都將會導致程序運行崩潰。
總的來說,Python 中允許使用類名直接調用實例方法,但必須手動為該方法的第一個 self 參數傳遞參數,這種調用方法的方式被稱為“非綁定方法”。
用類的實例對象訪問類成員的方式稱為綁定方法,而用類名調用類成員的方式稱為非綁定方法。
私有成員在類的外部不能直接訪問,一般是在類的內部進行訪問和操作,或者在類的外部通過調用對象的公有成員方法來訪問,而公有成員是可以公開使用的,既可以在類的內部進行訪問,也可以在外部程序中使用。
從形式上看,在定義類的成員時,如果成員名以兩個下劃線開頭但是不以兩個下劃線結束則表示是私有成員,否則就不是私有成員。
Python并沒有對私有成員提供嚴格的訪問保護機制,通過一種特殊方式“對象名._類名__xxx”也可以在外部程序中訪問私有成員,但這會破壞類的封裝性,不建議這樣做。
在Python中,以下劃線開頭的變量名和方法名有特殊的含義,尤其是在類的定義中。
_xxx:受保護成員;
__xxx__:系統定義的特殊成員;
__xxx:私有成員,只有類對象自己能訪問,子類對象不能直接訪問到這個成員,但在對象外部可以通過“對象名._類名__xxx”這樣的特殊方式來訪問。
注意:Python中不存在嚴格意義上的私有成員。
以上就是關于“Python類屬性和方法如何調用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。