Python入門(mén)學(xué)習(xí)之類(lèi)的相關(guān)知識(shí)總結(jié)
前言
Python是面向?qū)ο蟮某绦蛟O(shè)計(jì)(Object Oriented Programming)。
面向?qū)ο蟮某绦蛟O(shè)計(jì)的一條基本原則是:
計(jì)算機(jī)程序由多個(gè)能夠起到子程序作用的單元或者對(duì)象組合而成。
面向?qū)ο蟮某绦蛟O(shè)計(jì)的一個(gè)關(guān)鍵性概念是:
數(shù)據(jù)以及數(shù)據(jù)的操作(即函數(shù)方法)封裝在一起。
這個(gè)概念對(duì)于接觸C++的我來(lái)說(shuō)已經(jīng)很熟悉了。就是“類(lèi)”Class。
Python完全支持所有面向?qū)ο蟮幕竟δ埽热纾?/p>
“封裝”、“繼承”、“多態(tài)”以及對(duì)基類(lèi)方法的“覆蓋”或“重寫(xiě)”。
下面請(qǐng)由我慢慢道來(lái)。
一、類(lèi)的定義和使用
在C++中,類(lèi)是“結(jié)構(gòu)體”的衍生。在Python中,類(lèi)作為一個(gè)完全獨(dú)立的概念出現(xiàn)。
1.類(lèi)的定義:
class ClassName: ......
2.初始化函數(shù)和self參數(shù):【非常重要?。。?!】
def __init__(self,a,b,......): self.變量1=a self.變量2=b ......
①Python在初始化函數(shù)里定義“變量”。
當(dāng)我們要使用這個(gè)類(lèi)的時(shí)候,可以直接對(duì)初始化函數(shù)里的變量賦值。
當(dāng)然,可以不寫(xiě)形參a,b等等,直接給變量賦值。
②self參數(shù)表征這個(gè)類(lèi)。
在類(lèi)中寫(xiě)函數(shù)(即方法)時(shí),都必須傳入self參數(shù)。之后會(huì)舉例說(shuō)明。
【由此,我們可以發(fā)現(xiàn),python中的init初始化函數(shù)與C++中的構(gòu)造函數(shù)如出一轍,其原理其實(shí)是一樣的】
3.外部變量使用類(lèi):即調(diào)用類(lèi)的初始函數(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,此時(shí)標(biāo)明example使用了A類(lèi) print(A.a) #輸出1 print(A.b) #輸出2
4.限制變量的適用范圍:私有or公有
我們知道,C++類(lèi)中的變量有public、protected和private三種。Python中當(dāng)然也有,只是書(shū)寫(xiě)方式不同。
特別注意,private變量“類(lèi)內(nèi)”和“類(lèi)外”的調(diào)用方法是不同的。
在類(lèi)外獲取private變量值的方法有兩種:
①通過(guò)特定“接口”:即調(diào)用類(lèi)內(nèi)函數(shù)方法,在類(lèi)內(nèi)通過(guò)self實(shí)現(xiàn)對(duì)private變量的使用
②通過(guò)特殊方法:example._ ClassName(類(lèi)名) __var(變量)
如果直接無(wú)腦調(diào)用private,程序出現(xiàn)AttributeError錯(cuò)誤。當(dāng)然也不能對(duì)直接對(duì)private變量進(jìn)行該值和賦值的操作。
class A: def __init__(self,a,b,c): self.one=a #沒(méi)有修飾,等價(jià)于public self._two=b #加一條下劃線(xiàn),等價(jià)于protected self.__three=c #加兩條下劃線(xiàn),等價(jià)于private def get_all(self): print(self.one) #類(lèi)內(nèi)的調(diào)用方式:格式與定義相同 print(self._two) print(self.__three) example=A(1,2,3) example.get_all() #通過(guò)“接口”獲取private值 print(example._A__three) #通過(guò)特殊方法獲取private值
以上就是基本知識(shí),我們通過(guò)一個(gè)示例程序加深印象:
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) #類(lèi)內(nèi)部調(diào)用protected變量,加一個(gè)下劃線(xiàn)
print(self.__weight) #類(lèi)內(nèi)部調(diào)用private變量,加兩個(gè)下劃線(xiàn)
print(self.sex)
def get_weight(self): #接口:通過(guò)方法獲得private變量值,相當(dāng)于一個(gè)通道
print("His(Her) weight is:")
print(self.__weight)
DIONA=Human("diona",'150cm','50kg','female(♀)')
#通過(guò)類(lèi)的內(nèi)部函數(shù)訪(fǎng)問(wèn)變量并輸出,可以正常使用private和protected屬性的變量。
DIONA.get_info()
#height為protected屬性,在類(lèi)外調(diào)用時(shí),要加一個(gè)下劃線(xiàn)
print(DIONA._height)
#weight為private屬性,在類(lèi)外調(diào)用時(shí),要用特殊的方法:xxx._Classname(類(lèi)名)__varname(變量名)
print(DIONA._Human__weight)
#使用接口獲得weight的值
DIONA.get_weight()
二、類(lèi)的方法
類(lèi)的方法分為“共有方法”、“私有方法”、“靜態(tài)方法”和“類(lèi)方法”。本文詳細(xì)講述后兩者。
1.靜態(tài)方法:
又稱(chēng)“非實(shí)例方法”,一般與實(shí)例無(wú)關(guān)的方法,用于其他方法順帶調(diào)用。使用之前最好用@ staticmethod 注釋
2.類(lèi)方法:
接受“類(lèi)屬性”的方法。至少要接受一個(gè)形參cls,但調(diào)用時(shí)不需要為cls傳遞值。最好用@ classmethod 注釋。
p.s:何為“類(lèi)屬性”?就是不寫(xiě)在init函數(shù)中,直接寫(xiě)在類(lèi)中的變量。
class A: one=0 #這個(gè)one是“類(lèi)屬性” def __init__(self): self.two=0 #這個(gè)two是“self屬性”
3.實(shí)例方法:
就是使用self屬性的一般方法。上面“一”中所寫(xiě)到的方法都是實(shí)例方法。
4.外部調(diào)用規(guī)則:
①實(shí)例方法:只能使用實(shí)例名。
②靜態(tài)方法和類(lèi)方法:可以使用實(shí)例名,也可以使用類(lèi)名。
程序?qū)嵗?/p>
class Student:
_number=0 #這個(gè)number是類(lèi)屬性,直接定義在類(lèi)中,必須用類(lèi)方法去調(diào)用
def __init__(self,name,uid):
self._name=name
self._uid=uid
Student._number+=1 #每初始化一次,學(xué)生人數(shù)加1
#另外,調(diào)用類(lèi)屬性時(shí),使用類(lèi)名:ClassName.varname
#實(shí)例方法:對(duì)self定義的變量操作
def get_name(self):
print(self._name)
#靜態(tài)方法:(非實(shí)例方法)一般與實(shí)例無(wú)關(guān)的方法,用于其他方法順帶調(diào)用。
@ staticmethod
def pls(a,b):
return a+b;
@ classmethod
#類(lèi)方法:至少要接受一個(gè)形參cls,但調(diào)用時(shí)不需要為cls傳遞值
def get_number(cls):
print(cls._number)
lwc=Student('lwc','20009100132')
gtj=Student('gtj','20009100128')
wxm=Student('wxm','20018900232')
#外部調(diào)用實(shí)例方法,使用實(shí)例名。不能用類(lèi)名調(diào)用實(shí)例方法。
lwc.get_name()
#外部調(diào)用類(lèi)方法,使用類(lèi)名或者實(shí)例名。
Student.get_number()
lwc.get_number()
三、類(lèi)的屬性
類(lèi)的屬性通俗地講就是“類(lèi)中存放的變量”,一般有“類(lèi)屬性”和“self屬性”兩種。
類(lèi)的屬性在“二”中已經(jīng)講過(guò),還有一個(gè)叫“動(dòng)態(tài)增加屬性”和“動(dòng)態(tài)刪除屬性”的內(nèi)容,實(shí)際運(yùn)用較少,在此略講了。
四、類(lèi)中常用特殊方法
Python類(lèi)有大量的特殊方法。之前講的初始化函數(shù)就是“構(gòu)造函數(shù)”,就是一個(gè)特殊方法。與其對(duì)應(yīng)的“析構(gòu)函數(shù)”__ deal __( )也是特殊方法。
下面羅列了大量的特殊方法:

到此這篇關(guān)于Python入門(mén)學(xué)習(xí)之類(lèi)的相關(guān)知識(shí)總結(jié)的文章就介紹到這了,更多相關(guān)Python類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中的Nonetype類(lèi)型怎么判斷
- python數(shù)據(jù)類(lèi)型相關(guān)知識(shí)擴(kuò)展
- 一篇文章帶你搞懂Python類(lèi)的相關(guān)知識(shí)
- 用 Python 元類(lèi)的特性實(shí)現(xiàn) ORM 框架
- 詳細(xì)總結(jié)Python類(lèi)的多繼承知識(shí)
- python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類(lèi)
- Python-typing: 類(lèi)型標(biāo)注與支持 Any類(lèi)型詳解
- Python進(jìn)階學(xué)習(xí)之帶你探尋Python類(lèi)的鼻祖-元類(lèi)
- python中必會(huì)的四大高級(jí)數(shù)據(jù)類(lèi)型(字符,元組,列表,字典)
- Python如何把不同類(lèi)型數(shù)據(jù)的json序列化
- Python基礎(chǔ)之元類(lèi)詳解
相關(guān)文章
配置python連接oracle讀取excel數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)的操作流程
這篇文章主要介紹了配置python連接oracle,讀取excel數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
獨(dú)立進(jìn)程使用django模型及django.setup()使用
這篇文章主要介紹了獨(dú)立進(jìn)程使用django模型(django.setup()使用),它提供了一種簡(jiǎn)單且高效的方式來(lái)利用Django強(qiáng)大的功能,并使你的代碼更易于維護(hù)和擴(kuò)展,需要的朋友可以參考下2023-07-07
Python學(xué)習(xí)教程之常用的內(nèi)置函數(shù)大全
python給我們提供了很多已經(jīng)定義好的函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python學(xué)習(xí)教程之一些常用的內(nèi)置函數(shù),文中分享了關(guān)于數(shù)學(xué)函數(shù)、功能函數(shù)、類(lèi)型轉(zhuǎn)換函數(shù)、字符串處理和序列處理函數(shù)的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07
python判斷一個(gè)變量是否已經(jīng)設(shè)置的方法
這篇文章主要介紹了python判斷一個(gè)變量是否已經(jīng)設(shè)置的方法,有需要的朋友們可以跟著學(xué)習(xí)參考下。2020-08-08
python人工智能算法之線(xiàn)性回歸實(shí)例
這篇文章主要為大家介紹了python人工智能算法之線(xiàn)性回歸實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
手把手帶你用Python實(shí)現(xiàn)一個(gè)計(jì)時(shí)器
雖然Python是一種有效的編程語(yǔ)言,但純Python程序比C、Rust和Java等編譯語(yǔ)言中的對(duì)應(yīng)程序運(yùn)行得更慢,為了更好地監(jiān)控和優(yōu)化Python程序,今天將為大家介紹如何使用?Python?計(jì)時(shí)器來(lái)監(jiān)控程序運(yùn)行的速度,以便正對(duì)性改善代碼性能2022-06-06
如何用python將文件夾內(nèi)多個(gè)excel表格合并成總表
前幾天遇見(jiàn)這么一個(gè)問(wèn)題,手上有很多張表格,這些表格中都只有一個(gè)sheet,需要把這些表匯總到一張表,下面這篇文章主要給大家介紹了關(guān)于如何用python將文件夾內(nèi)多個(gè)excel表格合并成總表的相關(guān)資料,需要的朋友可以參考下2023-06-06
Python工程師面試題 與Python Web相關(guān)
這篇文章主要為大家分享了Python工程師面試題,面試題的內(nèi)容主要與Python Web相關(guān),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01
Python實(shí)現(xiàn)深度遍歷和廣度遍歷的方法
今天小編就為大家分享一篇Python實(shí)現(xiàn)深度遍歷和廣度遍歷的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01

