python中class類(lèi)與方法的用法實(shí)例詳解
因?yàn)橐恢辈惶宄嫦驅(qū)ο蟮念?lèi)和方法的編程思想,所以特地補(bǔ)了一下python-class的知識(shí),在這里記錄和分享一下。
類(lèi)和方法的概念和實(shí)例
- 類(lèi)(Class):用來(lái)描述具有相同的屬性和方法的對(duì)象的集合。它定義了該集合中每個(gè)對(duì)象所共有的屬性和方法。對(duì)象是類(lèi)的實(shí)例。
- 方法:類(lèi)中定義的函數(shù)。
- 類(lèi)的構(gòu)造方法__init__():類(lèi)有一個(gè)名為 init() 的特殊方法(構(gòu)造方法),該方法在類(lèi)實(shí)例化時(shí)會(huì)自動(dòng)調(diào)用。
- 實(shí)例變量:在類(lèi)的聲明中,屬性是用變量來(lái)表示的,這種變量就稱(chēng)為實(shí)例變量,實(shí)例變量就是一個(gè)用 self 修飾的變量。
- 實(shí)例化:創(chuàng)建一個(gè)類(lèi)的實(shí)例,類(lèi)的具體對(duì)象。
- 繼承:即一個(gè)派生類(lèi)(derived class)繼承基類(lèi)(base class)的字段和方法。繼承也允許把一個(gè)派生類(lèi)的對(duì)象作為一個(gè)基類(lèi)對(duì)象對(duì)待。例如,有這樣一個(gè)設(shè)計(jì):一個(gè)Dog類(lèi)型的對(duì)象派生自Animal類(lèi),這是模擬"是一個(gè)(is-a)"關(guān)系(例圖,Dog是一個(gè)Animal)。
1.python類(lèi):class
python的class(類(lèi))相當(dāng)于一個(gè)多個(gè)函數(shù)組成的家族,如果在這個(gè)Myclass大家族里有一個(gè)人叫f,假如這個(gè)f具有print天氣的作用,那么如果有一天我需要這個(gè)f來(lái)print一下今天的天氣,那么我必須叫他的全名MyClass.f才可以讓他給我print,即在調(diào)用他的時(shí)候需要帶上他的家族名稱(chēng)+他的名稱(chēng)。
- 屬性:屬性就是在這個(gè)類(lèi)里的變量。如果變量是物品,那么不同的屬性就是這個(gè)大家族里不同的物品
- 方法:方法就是在這個(gè)類(lèi)里的函數(shù)。如果函數(shù)是人,那么不同的方法就是這個(gè)大家族里不同的人。
MyClass實(shí)例:
#Myclass家族,但是這個(gè)家族只有一個(gè)人f
class MyClass:
"""一個(gè)簡(jiǎn)單的類(lèi)實(shí)例"""
i = 12345
def f(self):
return 'hello world'
# 實(shí)例化類(lèi)
x = MyClass()
# 訪問(wèn)類(lèi)的屬性和方法
print("MyClass 類(lèi)的屬性 i 為:", x.i) #家族x + 物品名i
print("MyClass 類(lèi)的方法 f 輸出為:", x.f()) #家族x + 人名f
輸出結(jié)果:

2.類(lèi)的構(gòu)造方法__init__()
假如init()也是人,但是他是家族和外界聯(lián)絡(luò)員,當(dāng)外界的人想調(diào)用自己家族的人,就必須要先告訴他,所以只要家族的人被調(diào)用,那么init()就會(huì)被先執(zhí)行,然后由他去告訴那個(gè)被調(diào)用的人,執(zhí)行被調(diào)用的。
init()實(shí)例:
class Complex:
def __init__(self, realpart, imagpart): #必須要有一個(gè)self參數(shù),
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i) # 輸出結(jié)果:3.0 -4.5
輸出結(jié)果:

3.類(lèi)中方法的參數(shù)self
在類(lèi)的內(nèi)部,使用 def 關(guān)鍵字來(lái)定義一個(gè)方法,與一般函數(shù)定義不同,類(lèi)方法必須包含參數(shù)self, 且為第一個(gè)參數(shù),self代表的是類(lèi)的實(shí)例。
- self:類(lèi)的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別——必須有一個(gè)額外的第一個(gè)參數(shù)名稱(chēng), 按照慣例它的名稱(chēng)是self。
- 類(lèi)的實(shí)例:是將類(lèi)應(yīng)用在實(shí)例場(chǎng)景之中,比如有個(gè)類(lèi)里的函數(shù)是f,假如這個(gè)f具有print某一時(shí)刻的天氣狀況的能力,那么如果我需要這個(gè)f來(lái)print一下今天12點(diǎn)的天氣,那么讓他打印今天12點(diǎn)的天氣這個(gè)動(dòng)作,就是類(lèi)的實(shí)例化,讓類(lèi)中的函數(shù)具有的能力變成真實(shí)的動(dòng)作。
實(shí)例化實(shí)例:
#類(lèi)定義
class people:
#定義基本屬性
name = ''
age = 0
#定義私有屬性,私有屬性在類(lèi)外部無(wú)法直接進(jìn)行訪問(wèn)
#定義構(gòu)造方法
def __init__(self,n,a):
self.name = n
self.age = a
def speak(self):
print("%s 說(shuō): 我 %d 歲。" %(self.name,self.age))
# 實(shí)例化類(lèi)
p = people('Python',10,30)
p.speak()
輸出結(jié)果:

4.繼承
假如有兩個(gè)家族,有一個(gè)家族A開(kāi)始沒(méi)落了,另一個(gè)新興的家族B想繼承A家族的物資和傭人,那么就可以通過(guò)如下的方式實(shí)現(xiàn)繼承,在這里,家族A即是父類(lèi),家族B是子類(lèi)。在用法上,如果B家族可以任意使用A家族的物品和傭人。
class [子類(lèi)]([父類(lèi)]):
- BaseClassName(示例中的基類(lèi)名)必須與派生類(lèi)定義在一個(gè)作用域內(nèi)。除了類(lèi),還可以用表達(dá)式,基類(lèi)定義在另一個(gè)模塊中時(shí)這一點(diǎn)非常有用。
- python還支持多繼承,即可以繼承多個(gè)父類(lèi)。繼承方式和單繼承方式一樣,方式如下:
class [子類(lèi)]([父類(lèi)]1, [父類(lèi)]2, [父類(lèi)]3):
繼承實(shí)例:
#類(lèi)定義
class people:
#定義基本屬性
name = ''
age = 0
#定義私有屬性,私有屬性在類(lèi)外部無(wú)法直接進(jìn)行訪問(wèn)
__weight = 0
#定義構(gòu)造方法
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 說(shuō): 我 %d 歲。" %(self.name,self.age))
#單繼承示例
class student(people): #student為子類(lèi),people為父類(lèi)
grade = ''
def __init__(self,n,a,w,g):
#調(diào)用父類(lèi)的構(gòu)函
people.__init__(self,n,a,w)
self.grade = g
#覆寫(xiě)父類(lèi)的方法
def speak(self):
print("%s 說(shuō): 我 %d 歲了,我在讀 %d 年級(jí)"%(self.name,self.age,self.grade))
s = student('ken',10,60,3)
s.speak()
運(yùn)行結(jié)果:

5.方法重寫(xiě)
如果你的父類(lèi)方法的功能不能滿足你的需求,你可以在子類(lèi)重寫(xiě)你父類(lèi)的方法。即如果B家族繼承了A家族,但是B家族有個(gè)傭人只會(huì)掃地,于是A家族給這個(gè)人洗腦,讓他啥都不會(huì),然后再教這個(gè)傭人洗碗、擦桌子的技能,那么這個(gè)傭人就只會(huì)洗碗和擦桌子了。
- super()函數(shù)是用于調(diào)用父類(lèi)(超類(lèi))的一個(gè)方法。
方法重寫(xiě)實(shí)例:
class Parent: # 定義父類(lèi)
def myMethod(self):
print('調(diào)用父類(lèi)方法')
class Child(Parent): # 定義子類(lèi)
def myMethod(self):
print('調(diào)用子類(lèi)方法')
c = Child() # 子類(lèi)實(shí)例
c.myMethod() # 子類(lèi)調(diào)用重寫(xiě)方法
super(Child,c).myMethod() #用子類(lèi)對(duì)象調(diào)用父類(lèi)已被覆蓋的方法
輸出結(jié)果:

類(lèi)的特殊屬性與方法
類(lèi)的私有屬性
_private_attrs:兩個(gè)下劃線開(kāi)頭,聲明該屬性為私有,不能在類(lèi)的外部被使用或直接訪問(wèn)。在類(lèi)內(nèi)部的方法中使用時(shí) self.__private_attrs。
私有屬性實(shí)例:
class JustCounter:
__secretCount = 0 # 私有變量
publicCount = 0 # 公開(kāi)變量
def count(self):
self.__secretCount += 1
self.publicCount += 1
print(self.__secretCount)
counter = JustCounter()
counter.count()
counter.count()
print(counter.publicCount)
print(counter.__secretCount) # 報(bào)錯(cuò),實(shí)例不能訪問(wèn)私有變量
輸出結(jié)果:

類(lèi)的私有方法
- __private_method:兩個(gè)下劃線開(kāi)頭,聲明該方法為私有方法,只能在類(lèi)的內(nèi)部調(diào)用 ,不能在類(lèi)的外部調(diào)用。self.__private_methods。
私有方法實(shí)例:
class Site:
def __init__(self, name, url):
self.name = name # public
self.__url = url # private
def who(self):
print('name : ', self.name)
print('url : ', self.__url)
def __foo(self): # 私有方法
print('這是私有方法')
def foo(self): # 公共方法
print('這是公共方法')
self.__foo()
x = Site('Python', 'www.irvingao.com')
x.who() # 正常輸出
x.foo() # 正常輸出
x.__foo() # 報(bào)錯(cuò)
輸出結(jié)果:

參考學(xué)習(xí)資料:
總結(jié)
到此這篇關(guān)于python中class類(lèi)與方法的文章就介紹到這了,更多相關(guān)python class類(lèi)與方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python基礎(chǔ)之標(biāo)準(zhǔn)庫(kù)和常用的第三方庫(kù)案例教程
這篇文章主要介紹了Python基礎(chǔ)之標(biāo)準(zhǔn)庫(kù)和常用的第三方庫(kù)案例教程,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
python 用opencv調(diào)用訓(xùn)練好的模型進(jìn)行識(shí)別的方法
今天小編就為大家分享一篇python 用opencv調(diào)用訓(xùn)練好的模型進(jìn)行識(shí)別的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
基于Python編寫(xiě)一個(gè)語(yǔ)音合成系統(tǒng)
這篇文章主要介紹了如何利用Python制作一個(gè)語(yǔ)音合成系統(tǒng),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的小伙伴可以了解一下2022-03-03
基于Python實(shí)現(xiàn)敲電子木魚(yú)效果
這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)敲電子木魚(yú)加功德效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2024-12-12
python 獲取鍵盤(pán)輸入,同時(shí)有超時(shí)的功能示例
今天小編就為大家分享一篇python 獲取鍵盤(pán)輸入,同時(shí)有超時(shí)的功能示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
Python數(shù)據(jù)庫(kù)自動(dòng)化完整指南
本指南詳細(xì)講解如何使用Python操作MySQL、Oracle和Microsoft?SQL?Server數(shù)據(jù)庫(kù),涵蓋常用庫(kù)、基礎(chǔ)操作、高級(jí)功能及完整代碼示例,需要的朋友可以參考下2025-03-03
一篇文章告訴你如何用python進(jìn)行自動(dòng)化測(cè)試,調(diào)用c程序
這篇文章主要介紹了Python實(shí)現(xiàn)性能自動(dòng)化測(cè)試調(diào)用c程序的方法,本文圖文并茂通過(guò)實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2021-08-08
python 實(shí)現(xiàn)圖片上傳接口開(kāi)發(fā) 并生成可以訪問(wèn)的圖片url
今天小編就為大家分享一篇python 實(shí)現(xiàn)圖片上傳接口開(kāi)發(fā) 并生成可以訪問(wèn)的圖片url,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
不同系統(tǒng)下python與pip的安裝及常見(jiàn)問(wèn)題詳解
學(xué)習(xí)python的第一步,是安裝python,這篇文章主要是介紹,如何在不同的系統(tǒng)上安裝python,以及遇到的一些問(wèn)題,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01

