前言
大家好,前面我們學(xué)習(xí)了 python 的基礎(chǔ)用法,那么從今天開始,我們將學(xué)習(xí) python 的面向?qū)ο缶幊蹋敲词裁唇凶雒嫦驅(qū)ο蟮木幊棠兀?/p>
面向?qū)ο缶幊淌且环N編程范式,它將數(shù)據(jù)和操作數(shù)據(jù)的方法封裝在對(duì)象中,并通過對(duì)象之間的交互來實(shí)現(xiàn)程序的設(shè)計(jì)和實(shí)現(xiàn)。
在面向?qū)ο缶幊讨?,程序被組織成一組相互作用的對(duì)象,每個(gè)對(duì)象都有自己的數(shù)據(jù)和可以處理這些數(shù)據(jù)的方法。對(duì)象通過消息傳遞的方式進(jìn)行通信,一個(gè)對(duì)象可以請(qǐng)求另一個(gè)對(duì)象執(zhí)行特定的操作。
面向?qū)ο缶幊痰闹饕攸c(diǎn)包括:
-
封裝(Encapsulation):將數(shù)據(jù)和操作數(shù)據(jù)的方法封裝在對(duì)象中,對(duì)象對(duì)外部隱藏了內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),只暴露必要的接口。
-
繼承(Inheritance):通過繼承機(jī)制,可以從已有的類派生新的類,并對(duì)新的類進(jìn)行擴(kuò)展或修改。繼承可以實(shí)現(xiàn)代碼重用和層次化設(shè)計(jì)。
-
多態(tài)(Polymorphism):多態(tài)允許使用統(tǒng)一的接口來處理不同類的對(duì)象,提高了代碼的靈活性和可擴(kuò)展性。不同的對(duì)象可以對(duì)同一消息做出不同的響應(yīng)。
面向?qū)ο缶幊痰膬?yōu)點(diǎn)包括代碼重用性高、可維護(hù)性強(qiáng)、模塊化程度高等。它被廣泛應(yīng)用于各種編程語言和領(lǐng)域,如Java、C++、Python等。
那么本篇我怕將帶大家進(jìn)入 python面向?qū)ο缶幊?的大門,讓我們一起來看看吧。??????
如何理解面向?qū)ο缶幊?/h2>
舉個(gè)例子:當(dāng)我們手洗衣服的時(shí)候,我們需要 找盆 - 放水 - 加洗衣粉 - 浸泡 - 搓洗 - 擰干水 - 倒水 - 漂洗N次 - 擰干 - 晾曬。 但是如果我們使用洗衣機(jī)洗衣服的話,我們只需要 打開洗衣機(jī) - 放衣服 - 加洗衣粉 - 按下開始按鈕 - 晾曬。面向?qū)ο笪覀冎恍枰⒁鈱?duì)象是什么,而不必過于關(guān)心過程是什么。
總結(jié):面向?qū)ο缶褪菍⒕幊坍?dāng)成是一個(gè)事物,對(duì)外界來說,事物是直接使用的,不用去管他內(nèi)部的情況。而編程就是設(shè)置事物能夠做什么事。
在 python 中如何使用面向?qū)ο缶幊?/h2>
在 python 中實(shí)現(xiàn)面向?qū)ο缶幊桃蕾囉陬惡蛯?duì)象,類就相當(dāng)于是一張圖紙,一個(gè)事物必須依靠這個(gè)圖紙才能實(shí)現(xiàn)出一個(gè)實(shí)體,這種類創(chuàng)建出對(duì)象的過程也叫做實(shí)例化
定義類
在 python 中,使用 class 類名():
來創(chuàng)建出一個(gè)類。并且類名通常使用大駝峰的形式。
??
class Washer():
print('這是一個(gè)類')
print(type(Washer))
這種類中代碼不在函數(shù)內(nèi)部的函數(shù)在定義的時(shí)候就會(huì)執(zhí)行。也就是說不管我們有沒有使用這個(gè)類都會(huì)執(zhí)行這個(gè)代碼。
class Washer():
print('這是一個(gè)類')
??
而通常一個(gè)事物被創(chuàng)建出來往往會(huì)具有相應(yīng)的功能,那么在類中我們定義函數(shù)使這個(gè)類具有某種功能。
class Washer():
def wash_clothes(self):
print('洗衣服')
print(type(Washer))
函數(shù)中的方法只有被調(diào)用的時(shí)候才會(huì)執(zhí)行。
創(chuàng)建對(duì)象
當(dāng)我們創(chuàng)建完一個(gè)類之后,我們可以使用 對(duì)象名 = 類名()
來實(shí)例化出一個(gè)對(duì)象。在實(shí)例化出一個(gè)對(duì)象之后,我們可以使用 對(duì)象名.方法
來調(diào)用該對(duì)象中的方法。
class Washer():
def wash_clothes(self):
print('洗衣服')
washer1 = Washer();
washer1.wash_clothes()
當(dāng)我們直接打印類名和對(duì)象名的時(shí)候,會(huì)輸出什么?
class Washer():
def wash_clothes(self):
print('洗衣服')
washer1 = Washer()
washer2 = Washer()
print(Washer)
print(washer1)
print(washer2)
當(dāng)我們直接打印對(duì)象名的時(shí)候,會(huì)輸出對(duì)象名的地址,并且同一個(gè)類的不同對(duì)象的地址不同。
self
細(xì)心的人可能會(huì)發(fā)現(xiàn)為什么函數(shù)的參數(shù)列表中會(huì)出現(xiàn) self 呢?這個(gè) self 不是我手動(dòng)添加進(jìn)去的,而是 python 自動(dòng)補(bǔ)充的,這個(gè) self 表示調(diào)用該函數(shù)的對(duì)象。
class Washer():
hight = 100
weight = 200
def wash_clothes(self):
print('洗衣服')
print(self)
washer1 = Washer();
print(washer1)
washer1.wash_clothes()
washer2 = Washer()
print(washer2)
washer2.wash_clothes()
不僅如此,我們還可以在類當(dāng)中使用 self.屬性
來訪問當(dāng)前類中的屬性。
class Washer():
hight = 100
weight = 200
def wash_clothes(self):
print('洗衣服')
print(f'洗衣機(jī)的高度是{self.hight}')
washer1 = Washer()
washer1.wash_clothes()
添加和獲取對(duì)象屬性
添加屬性
屬性代表對(duì)象具有的特性,比如高度,重量和價(jià)格等,這些都屬于對(duì)象的屬性。
類外添加屬性
在類外添加屬性就相當(dāng)于什么呢?就相當(dāng)于我們買手機(jī),當(dāng)我們拿到手機(jī)的時(shí)候,我們需要自己下載應(yīng)用,打造屬于我們自己的手機(jī),手機(jī)具有我們想要的屬性,這就是在類外添加屬性的大概意義。我們使用 對(duì)象名.屬性名 = 值
來在類外添加屬性。
class Washer():
def wash_clothes(self):
print('洗衣服')
washer1 = Washer()
washer1.hight = 100
類中添加屬性
在類中添加屬性就相當(dāng)于,在工廠的時(shí)候,制作出來就有的屬性,顏色啊、大小什么的,這些就是所有事物都具有的共同屬性,只是具體的屬性內(nèi)容有區(qū)別。我們使用屬性名 = 值
來在類中添加屬性。
class Washer():
hight = 100
weight = 500
def wash_clothes(self):
print('洗衣服')
washer1 = Washer()
訪問屬性
類外訪問屬性
在類外訪問屬性使用 對(duì)象名.屬性
。
class Washer():
def wash_clothes(self):
print('洗衣服')
washer1 =Washer()
washer1.hight = 100
washer1.weight = 500
print(washer1.hight) # 100
print(washer1.weight) # 500
類中訪問屬性
在類中使用 self.屬性
來訪問屬性。
class Washer():
hight = 100
weight = 500
def print_info(self):
print(f'洗衣機(jī)的高度為{self.hight},洗衣機(jī)的重量為{self.weight}')
washer1 =Washer()
washer1.print_info()
魔法方法
在 python 類中有很多特殊的方法,他們的格式是 __xx__()
,他們具有特殊的功能。
__ init __() 方法
__ init __() 方法是當(dāng)我們實(shí)例化出一個(gè)對(duì)象的時(shí)候自動(dòng)調(diào)用的方法,不需要我們手動(dòng)調(diào)用,通常用于給對(duì)象的屬性賦值或者添加屬性。
class Washer():
def __init__(self):
self.hight = 100
self.weight = 500
washer1 = Washer()
print(washer1.hight) # 100
print(washer1.weight) # 500
__ init __ 方法也可以傳進(jìn)去參數(shù),用來給對(duì)象屬性賦值等作用。
class Washer():
hight = 0
weight = 0
def __init__(self,hight,weight):
self.hight = hight
self.weight = weight
washer1 = Washer(100,500)
print(washer1.hight) # 100
print(washer1.weight) # 500
__ str __()方法
當(dāng)我們直接使用 print() 函數(shù)打印對(duì)象名的時(shí)候,會(huì)輸出該對(duì)象的地址,但是當(dāng)我們類中存在 __ str __() 方法的時(shí)候,使用 print(對(duì)象名) 的時(shí)候,輸出的是 __ str __() 中return的數(shù)據(jù)。
class Washer():
def __str__(self):
return '這是一個(gè)洗衣機(jī)'
washer1 = Washer()
print(washer1)
__ del __() 方法
當(dāng)我們刪除對(duì)象的時(shí)候,如果該對(duì)象中存在 __ del __() 方法的時(shí)候,會(huì)默認(rèn)執(zhí)行蓋房啊中的內(nèi)容。但是實(shí)際上,當(dāng)我們不手動(dòng)刪除對(duì)象的時(shí)候,也會(huì)執(zhí)行該方法,因?yàn)楫?dāng)我們的程序執(zhí)行完成之后,對(duì)象就不會(huì)被使用了,會(huì)被刪除掉。文章來源:http://www.zghlxwxcb.cn/news/detail-548107.html
class Washer():
def __del__(self):
print(f'{self}對(duì)象已被刪除')
washer1 = Washer()
del washer1
文章來源地址http://www.zghlxwxcb.cn/news/detail-548107.html
到了這里,關(guān)于python 面向?qū)ο缶幊痰奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!