日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

三十五、Python面向?qū)ο螅毫钅恪俺泽@”的多態(tài)

 乙甲壬 2020-07-11
三十五、Python面向?qū)ο螅毫钅恪俺泽@”的多態(tài)

python面向?qū)ο笾鄳B(tài)

1.什么是Python中的多態(tài)

在Python中,由于在定義變量時(shí)沒(méi)有指定類(lèi)型,類(lèi)似弱類(lèi)型語(yǔ)言,而對(duì)于弱類(lèi)型的語(yǔ)言來(lái)說(shuō),在定義變量時(shí)并沒(méi)有聲明變量的類(lèi)型,因此同一個(gè)變量可以在不同的地方引用不同的對(duì)象,因此,同一個(gè)變量在引用不同對(duì)象時(shí)在調(diào)用同一個(gè)方法時(shí),可以呈現(xiàn)出不同的行為,具體呈現(xiàn)出哪一種行為完全由變量所引用的對(duì)象所決定,這就是多態(tài)。也是面向?qū)ο缶幊痰娜筇卣髦弧?/p>

2.Python中讓你吃驚的多態(tài)?

在講解Python中的多態(tài)時(shí),好多人都會(huì)覺(jué)得不可思議,原來(lái)自己一直在使用多態(tài),而自己卻毫無(wú)察覺(jué),下面來(lái)看一個(gè)例子:

class Cat: def say(self): print(f'我是喵星人, 我只喜歡喵喵叫')class Dog: def say(self): print(f'我是汪星人, 我喜歡汪汪照叫')# 定義變量x為Cat的實(shí)例x = Cat()# 調(diào)用x的say()方法x.say() # 我是喵星人, 我只喜歡喵喵叫# 將Dog()的實(shí)例的地址賦值給xx = Dog()# 調(diào)用x的say()方法x.say() # 我是汪星人, 我喜歡汪汪照叫

從上面的代碼示例可知,同一個(gè)變量x在執(zhí)行同一個(gè)方法say()時(shí),由于在不同時(shí)間x指向的對(duì)象不同,因此呈現(xiàn)出了不同的行為,這就是多態(tài),是不是看起來(lái)非常不可思議,也許你會(huì)感到非常失望,這種多態(tài)有什么用??? 事實(shí)上,在Python中,多態(tài)是一種非常靈活的編程機(jī)制,下面來(lái)看另外一個(gè)例子。

3.Python中多態(tài)的“真正”用途

假如我有一個(gè)工廠來(lái)生產(chǎn)各種手機(jī)配件的,比如有充電寶、耳機(jī)、手機(jī)支架、手機(jī)膜等。

  • 先定義一個(gè)工廠類(lèi)
class Factory:    def __init__(self, name):        self.name = name    def make_accessory(self, accessory):        print(f'開(kāi)始生產(chǎn)配件:{accessory.name}')        accessory.produce(self)    def __str__(self):        return f'{self.name}'
  • 定義配件類(lèi)
class PowerBank: def __init__(self, name): self.name=name def produce(self,factory): print(f'在 {factory} 生產(chǎn)充電寶')class HeadPhone: def __init__(self, name): self.name=name def produce(self,factory): print(f'在 {factory} 生產(chǎn)耳機(jī)')class ScreenProtector: def __init__(self, name): self.name=name def produce(self,factory): print(f'在 {factory} 生產(chǎn)手機(jī)膜')# 實(shí)例化工廠factory = Factory('華強(qiáng)北手機(jī)配置生產(chǎn)廠')factory.make_accessory(PowerBank('華為充電寶'))factory.make_accessory(HeadPhone('Oppo充電藍(lán)牙耳機(jī)'))factory.make_accessory(HeadPhone('手機(jī)膜'))
三十五、Python面向?qū)ο螅毫钅恪俺泽@”的多態(tài)

結(jié)果

從上面的例子可以體會(huì)到Python的多態(tài)的優(yōu)勢(shì),這種通過(guò)參數(shù)的動(dòng)態(tài)引用來(lái)調(diào)用引用后的對(duì)象中的方法非常靈活,動(dòng)態(tài)改變后傳入的對(duì)象只要具有指定的方法就行,至于該方法體現(xiàn)什么樣的行為,則完全取決于傳入對(duì)象本身。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多