介紹
與java一樣Python是一種支持面向?qū)ο缶幊痰母呒?jí)編程語言,它的核心思想之一就是繼承、封裝和多態(tài)。這三個(gè)概念是面向?qū)ο缶幊讨凶罨?、最核心的思想之一,也是Python編程中必須掌握的知識(shí)點(diǎn)之一
繼承
在面向?qū)ο缶幊讨?,繼承是指一個(gè)類(稱為子類)從另一個(gè)類(稱為父類)繼承其屬性和方法。子類可以繼承父類的所有屬性和方法,并可以根據(jù)需要添加新的屬性和方法。繼承可以減少代碼重復(fù),提高代碼的復(fù)用性和可維護(hù)性。
在python中是可以多繼承的
案例
class IDictService:
def getInfoById(self, i):
print('需要子類實(shí)現(xiàn)')
class Log:
def info(self, msg):
print('[info]: %s' % msg)
class DictServiceImpl(IDictService, Log):
def getInfoById(self, i):
super().getInfoById(i)
return i
dict = DictServiceImpl()
dict.info(dict.getInfoById(123))
# 通過該方法可以查看繼承的類與順序
print(DictServiceImpl.__mro__)
運(yùn)行結(jié)果
需要子類實(shí)現(xiàn)
[info]: 123
(<class '__main__.DictServiceImpl'>, <class '__main__.IDictService'>, <class '__main__.Log'>, <class 'object'>)
封裝
封裝是面向?qū)ο缶幊讨械囊粋€(gè)重要概念,它允許我們將屬性和方法綁定在一起,并將其隱藏在對象內(nèi)部。通過這種方式,我們可以防止外部程序直接訪問和修改對象的屬性,從而保護(hù)對象的完整性和安全性。
在python中私有方法和屬性通過兩個(gè)下劃線表示__
案例
class Person:
def __init__(self):
self.__age = 10
self.name = 'wendell'
def getAge(self):
return self.__age
def __print(self):
print("-----test--------")
p = Person()
print(p.name)
print(p.getAge())
# 私有屬性也是不安全的,只不過是加了個(gè)類前綴做了隱藏
p._Person__age = 20
print("被修改了", p.getAge())
# 不可以訪問
# AttributeError: 'Person' object has no attribute 'age'
print(p.__age)
# AttributeError: 'Person' object has no attribute '__print'
print(p.__print())
運(yùn)行結(jié)果
wendell
10
被修改了 20
Traceback (most recent call last):
File "/Users/wendell/PycharmProjects/study/oop/class_private.py", line 23, in <module>
print(p.age)
AttributeError: 'Person' object has no attribute '__age'
從上面的結(jié)果可以看出加了__后,對象里面就不會(huì)有這個(gè)屬性了,python里面是通過加了個(gè)類前綴做了隱藏,從而實(shí)現(xiàn)私有屬性的,但是不建議這么去訪問
如p._Person__age
多態(tài)
多態(tài)允許我們使用相同的接口來操作不同的對象。通過這種方式,我們可以編寫通用的代碼,可以處理多種不同類型的對象,從而使代碼更加靈活、可重用和可擴(kuò)展。
案例
# 多態(tài)
class Dog:
def color(self):
print("默認(rèn)顏色")
class RedDog(Dog):
def color(self):
print('紅色dog')
class YellowDog(Dog):
def color(self):
print('黃色dog')
class Unknow(Dog):
pass
yellow = YellowDog()
red = RedDog()
unknow = Unknow()
def print_color(dog):
dog.color()
print_color(yellow)
print_color(red)
print_color(unknow)
執(zhí)行結(jié)果
黃色dog
紅色dog
默認(rèn)顏色
上面案例中的 print_color 方法接受一個(gè)參數(shù),這個(gè)參數(shù)沒有定義死,而是隨著運(yùn)行時(shí)傳入的不同對象而執(zhí)行對應(yīng)的方法。這就是多態(tài),通過多態(tài),我們可以編寫通用的代碼,可以處理多種不同類型的對象
總結(jié)
總之掌握面向?qū)ο筮@三個(gè)概念,我們可以編寫更加優(yōu)雅、健壯和可維護(hù)的Python代碼。文章來源:http://www.zghlxwxcb.cn/news/detail-402222.html
歡迎關(guān)注,學(xué)習(xí)不迷路!文章來源地址http://www.zghlxwxcb.cn/news/detail-402222.html
到了這里,關(guān)于Python-繼承封裝多態(tài)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!