最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python適配器模式代碼實(shí)現(xiàn)解析

 更新時(shí)間:2019年08月02日 14:47:46   作者:寶山方圓  
這篇文章主要介紹了Python適配器模式代碼實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Python適配器模式,代碼,思考等

# -*- coding: utf-8 -*-
# author:baoshan
class Computer:
  def __init__(self, name):
    self.name = name
  def __str__(self):
    return 'the {} computer'.format(self.name)
  def execute(self):
    return 'executes a program'
class Synthesizer:
  def __init__(self, name):
    self.name = name
  def __str__(self):
    return 'the {} synthesizer'.format(self.name)
  def play(self):
    return 'is playing an electronic song'
class Human:
  def __init__(self, name):
    self.name = name
  def __str__(self):
    return '{} the human'.format(self.name)
  def speak(self):
    return 'says hello'
class Adapter:
  def __init__(self, obj, adapted_methods):
    self.obj = obj
    self.__dict__.update(adapted_methods)
def __str__(self):
    return str(self.obj)
def main():
  objects = [Computer('Asus')]
  synth = Synthesizer('moog')
  objects.append(Adapter(synth, dict(execute=synth.play)))
  human = Human('Bob')
  objects.append(Adapter(human, dict(execute=human.speak)))
  for i in objects:
    print('{} {}'.format(str(i), i.execute()))
if __name__ == '__main__':
  main()

代碼輸出:

the Asus computer executes a program
the moog synthesizer is playing an electronic song
Bob the human says hello

------------------------------------------------------------------------------------------

我們?cè)O(shè)法使得Human和Synthesizer類與客戶端所期望的接口兼容,且無需改變它們的源代碼。這太棒了!

這里有一個(gè)為你準(zhǔn)備的挑戰(zhàn)性練習(xí),當(dāng)前的實(shí)現(xiàn)有一個(gè)問題,當(dāng)所有類都有一個(gè)屬性name時(shí),以下代碼會(huì)運(yùn)行失敗。

  for i in objects:
    print('{}'.format(i.name))

首先想想這段代碼為什么會(huì)失敗?雖然從編碼的角度來看這是有意義的,但對(duì)于客戶端代碼來說毫無意義,客戶端不應(yīng)該關(guān)心“適配了什么”和“什么沒有被適配”這類細(xì)節(jié)。我們只是想提供一個(gè)統(tǒng)一的接口。該如何做才能讓這段代碼生效?

思考一下如何將未適配部分委托給包含在適配器類中的對(duì)象。

答案如下:

將適配器類更改如下,增加一行代碼

class Adapter:
  def __init__(self, obj, adapted_methods):
    self.obj = obj
    self.__dict__.update(adapted_methods)
    self.name = obj.name
  def __str__(self):
    return str(self.obj)

然后在main函數(shù)中獲取對(duì)應(yīng)的name,如下

def main():
  objects = [Computer('Asus')]
  synth = Synthesizer('moog')
  objects.append(Adapter(synth, dict(execute=synth.play)))
  human = Human('Bob')
  objects.append(Adapter(human, dict(execute=human.speak)))
  for i in objects:
    print('{} {}'.format(str(i), i.execute()))
    print('{}'.format(i.name))
if __name__ == '__main__':
  main()

輸出結(jié)果如下:

the Asus computer executes a program
Asus
the moog synthesizer is playing an electronic song
moog
Bob the human says hello
Bob

參考自:《精通Python設(shè)計(jì)模式》

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • django admin后管定制-顯示字段的實(shí)例

    django admin后管定制-顯示字段的實(shí)例

    這篇文章主要介紹了django admin后管定制-顯示字段的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 使用Python實(shí)現(xiàn)批量修改文件的修改日期功能

    使用Python實(shí)現(xiàn)批量修改文件的修改日期功能

    在日常的文件管理中,您可能需要批量修改文件的修改日期,比如,您可能希望將某個(gè)文件夾中的所有文件的修改日期隨機(jī)設(shè)置為6到8月份之間的日期,這在數(shù)據(jù)整理中可能非常有用,本文將詳細(xì)介紹如何使用Python實(shí)現(xiàn)這一功能,需要的朋友可以參考下
    2024-10-10
  • python基礎(chǔ)--除法(/,//,%)的應(yīng)用說明

    python基礎(chǔ)--除法(/,//,%)的應(yīng)用說明

    這篇文章主要介紹了python基礎(chǔ)--除法(/,//,%)的應(yīng)用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 分步驟教你用python一步步提取PPT中的圖片

    分步驟教你用python一步步提取PPT中的圖片

    今天要帶大家實(shí)現(xiàn)的是PPT圖片的提取。在我們學(xué)習(xí)工作中,PPT的使用還是非常頻繁的,但是自己做PPT是很麻煩的,所以就需要用到別人的模板或者素材,這個(gè)時(shí)候提取PPT圖片就可以減少我們很多工作。
    2021-09-09
  • Python  Asyncio模塊實(shí)現(xiàn)的生產(chǎn)消費(fèi)者模型的方法

    Python Asyncio模塊實(shí)現(xiàn)的生產(chǎn)消費(fèi)者模型的方法

    這篇文章主要介紹了Python Asyncio模塊實(shí)現(xiàn)的生產(chǎn)消費(fèi)者模型的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 深入剖析Python的列表和元組

    深入剖析Python的列表和元組

    這篇文章主要介紹了深入剖析Python的列表和元組,Python有4個(gè)內(nèi)建的數(shù)據(jù)結(jié)構(gòu),它們可以統(tǒng)稱為容器,因?yàn)樗鼈儗?shí)際上是一些“東西”組合而成的結(jié)構(gòu),而這些“東西”,可以是數(shù)字、字符甚至列表,或是它們的組合,需要的朋友可以參考下
    2023-07-07
  • PyGame貪吃蛇的實(shí)現(xiàn)代碼示例

    PyGame貪吃蛇的實(shí)現(xiàn)代碼示例

    貪吃蛇是款經(jīng)典游戲,本文將帶你一步步用python語(yǔ)言實(shí)現(xiàn)一個(gè)貪吃蛇小游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Windows環(huán)境下python環(huán)境安裝使用圖文教程

    Windows環(huán)境下python環(huán)境安裝使用圖文教程

    這篇文章主要為大家詳細(xì)介紹了Windows環(huán)境下python安裝使用圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python如何自定義鄰接表圖類

    Python如何自定義鄰接表圖類

    這篇文章主要介紹了Python如何自定義鄰接表圖類問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python竟能畫這么漂亮的花,帥呆了(代碼分享)

    Python竟能畫這么漂亮的花,帥呆了(代碼分享)

    這篇文章主要介紹了用Python作圖的一個(gè)簡(jiǎn)單實(shí)例,通過turtle模塊實(shí)現(xiàn)作圖,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評(píng)論

皋兰县| 建湖县| 滕州市| 城市| 静安区| 镇赉县| 海兴县| 瓦房店市| 克拉玛依市| 和田县| 沙坪坝区| 余干县| 兴海县| 重庆市| 绥德县| 寿宁县| 无为县| 揭东县| 方山县| 米林县| 柳江县| 吴江市| 盘锦市| 丘北县| 墨脱县| 恩施市| 巧家县| 云霄县| 霍城县| 闸北区| 平凉市| 陕西省| 宽城| 黑河市| 且末县| 灵璧县| 防城港市| 华安县| 应用必备| 宜章县| 揭阳市|