Python入門學習之類的相關(guān)知識總結(jié)
前言
Python是面向?qū)ο蟮某绦蛟O計(Object Oriented Programming)。
面向?qū)ο蟮某绦蛟O計的一條基本原則是:
計算機程序由多個能夠起到子程序作用的單元或者對象組合而成。
面向?qū)ο蟮某绦蛟O計的一個關(guān)鍵性概念是:
數(shù)據(jù)以及數(shù)據(jù)的操作(即函數(shù)方法)封裝在一起。
這個概念對于接觸C++的我來說已經(jīng)很熟悉了。就是“類”Class。
Python完全支持所有面向?qū)ο蟮幕竟δ?,比如?/p>
“封裝”、“繼承”、“多態(tài)”以及對基類方法的“覆蓋”或“重寫”。
下面請由我慢慢道來。
一、類的定義和使用
在C++中,類是“結(jié)構(gòu)體”的衍生。在Python中,類作為一個完全獨立的概念出現(xiàn)。
1.類的定義:
class ClassName: ......
2.初始化函數(shù)和self參數(shù):【非常重要?。。?!】
def __init__(self,a,b,......): self.變量1=a self.變量2=b ......
①Python在初始化函數(shù)里定義“變量”。
當我們要使用這個類的時候,可以直接對初始化函數(shù)里的變量賦值。
當然,可以不寫形參a,b等等,直接給變量賦值。
②self參數(shù)表征這個類。
在類中寫函數(shù)(即方法)時,都必須傳入self參數(shù)。之后會舉例說明。
【由此,我們可以發(fā)現(xiàn),python中的init初始化函數(shù)與C++中的構(gòu)造函數(shù)如出一轍,其原理其實是一樣的】
3.外部變量使用類:即調(diào)用類的初始函數(shù)
class A: def __init__(self,p,q): self.a=p self.b=q example=A(1,2) #調(diào)用初始化函數(shù),傳入形參p=1,q=2,此時標明example使用了A類 print(A.a) #輸出1 print(A.b) #輸出2
4.限制變量的適用范圍:私有or公有
我們知道,C++類中的變量有public、protected和private三種。Python中當然也有,只是書寫方式不同。
特別注意,private變量“類內(nèi)”和“類外”的調(diào)用方法是不同的。
在類外獲取private變量值的方法有兩種:
①通過特定“接口”:即調(diào)用類內(nèi)函數(shù)方法,在類內(nèi)通過self實現(xiàn)對private變量的使用
②通過特殊方法:example._ ClassName(類名) __var(變量)
如果直接無腦調(diào)用private,程序出現(xiàn)AttributeError錯誤。當然也不能對直接對private變量進行該值和賦值的操作。
class A: def __init__(self,a,b,c): self.one=a #沒有修飾,等價于public self._two=b #加一條下劃線,等價于protected self.__three=c #加兩條下劃線,等價于private def get_all(self): print(self.one) #類內(nèi)的調(diào)用方式:格式與定義相同 print(self._two) print(self.__three) example=A(1,2,3) example.get_all() #通過“接口”獲取private值 print(example._A__three) #通過特殊方法獲取private值
以上就是基本知識,我們通過一個示例程序加深印象:
class Human: def __init__(self,name,height,weight,sex): self.name=name self._height=height self.__weight=weight self.sex=sex def get_info(self): print(self.name) print(self._height) #類內(nèi)部調(diào)用protected變量,加一個下劃線 print(self.__weight) #類內(nèi)部調(diào)用private變量,加兩個下劃線 print(self.sex) def get_weight(self): #接口:通過方法獲得private變量值,相當于一個通道 print("His(Her) weight is:") print(self.__weight) DIONA=Human("diona",'150cm','50kg','female(♀)') #通過類的內(nèi)部函數(shù)訪問變量并輸出,可以正常使用private和protected屬性的變量。 DIONA.get_info() #height為protected屬性,在類外調(diào)用時,要加一個下劃線 print(DIONA._height) #weight為private屬性,在類外調(diào)用時,要用特殊的方法:xxx._Classname(類名)__varname(變量名) print(DIONA._Human__weight) #使用接口獲得weight的值 DIONA.get_weight()
二、類的方法
類的方法分為“共有方法”、“私有方法”、“靜態(tài)方法”和“類方法”。本文詳細講述后兩者。
1.靜態(tài)方法:
又稱“非實例方法”,一般與實例無關(guān)的方法,用于其他方法順帶調(diào)用。使用之前最好用@ staticmethod 注釋
2.類方法:
接受“類屬性”的方法。至少要接受一個形參cls,但調(diào)用時不需要為cls傳遞值。最好用@ classmethod 注釋。
p.s:何為“類屬性”?就是不寫在init函數(shù)中,直接寫在類中的變量。
class A: one=0 #這個one是“類屬性” def __init__(self): self.two=0 #這個two是“self屬性”
3.實例方法:
就是使用self屬性的一般方法。上面“一”中所寫到的方法都是實例方法。
4.外部調(diào)用規(guī)則:
①實例方法:只能使用實例名。
②靜態(tài)方法和類方法:可以使用實例名,也可以使用類名。
程序?qū)嵗?/p>
class Student: _number=0 #這個number是類屬性,直接定義在類中,必須用類方法去調(diào)用 def __init__(self,name,uid): self._name=name self._uid=uid Student._number+=1 #每初始化一次,學生人數(shù)加1 #另外,調(diào)用類屬性時,使用類名:ClassName.varname #實例方法:對self定義的變量操作 def get_name(self): print(self._name) #靜態(tài)方法:(非實例方法)一般與實例無關(guān)的方法,用于其他方法順帶調(diào)用。 @ staticmethod def pls(a,b): return a+b; @ classmethod #類方法:至少要接受一個形參cls,但調(diào)用時不需要為cls傳遞值 def get_number(cls): print(cls._number) lwc=Student('lwc','20009100132') gtj=Student('gtj','20009100128') wxm=Student('wxm','20018900232') #外部調(diào)用實例方法,使用實例名。不能用類名調(diào)用實例方法。 lwc.get_name() #外部調(diào)用類方法,使用類名或者實例名。 Student.get_number() lwc.get_number()
三、類的屬性
類的屬性通俗地講就是“類中存放的變量”,一般有“類屬性”和“self屬性”兩種。
類的屬性在“二”中已經(jīng)講過,還有一個叫“動態(tài)增加屬性”和“動態(tài)刪除屬性”的內(nèi)容,實際運用較少,在此略講了。
四、類中常用特殊方法
Python類有大量的特殊方法。之前講的初始化函數(shù)就是“構(gòu)造函數(shù)”,就是一個特殊方法。與其對應的“析構(gòu)函數(shù)”__ deal __( )也是特殊方法。
下面羅列了大量的特殊方法:
到此這篇關(guān)于Python入門學習之類的相關(guān)知識總結(jié)的文章就介紹到這了,更多相關(guān)Python類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中的Nonetype類型怎么判斷
- python數(shù)據(jù)類型相關(guān)知識擴展
- 一篇文章帶你搞懂Python類的相關(guān)知識
- 用 Python 元類的特性實現(xiàn) ORM 框架
- 詳細總結(jié)Python類的多繼承知識
- python 使用Tensorflow訓練BP神經(jīng)網(wǎng)絡實現(xiàn)鳶尾花分類
- Python-typing: 類型標注與支持 Any類型詳解
- Python進階學習之帶你探尋Python類的鼻祖-元類
- python中必會的四大高級數(shù)據(jù)類型(字符,元組,列表,字典)
- Python如何把不同類型數(shù)據(jù)的json序列化
- Python基礎之元類詳解
相關(guān)文章
Python tkinter分隔控件(Seperator)的使用
這篇文章主要介紹了Python tkinter分隔控件(Seperator)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04使用 pytorch 創(chuàng)建神經(jīng)網(wǎng)絡擬合sin函數(shù)的實現(xiàn)
這篇文章主要介紹了使用 pytorch 創(chuàng)建神經(jīng)網(wǎng)絡擬合sin函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02淺談使用Python內(nèi)置函數(shù)getattr實現(xiàn)分發(fā)模式
這篇文章主要介紹了淺談使用Python內(nèi)置函數(shù)getattr實現(xiàn)分發(fā)模式,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01