欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

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

答案如下:

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

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ù)中獲取對應(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è)計模式》

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

相關(guān)文章

  • 如何解決PyTorch程序占用較高CPU問題

    如何解決PyTorch程序占用較高CPU問題

    這篇文章主要介紹了如何解決PyTorch程序占用較高CPU問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python知識之列表的十個小技巧分享

    Python知識之列表的十個小技巧分享

    這篇文章主要介紹了Python知識之列表的十個小技巧分享,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • python實現(xiàn)快遞價格查詢系統(tǒng)

    python實現(xiàn)快遞價格查詢系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)快遞價格查詢系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python讀寫文件模式和文件對象方法實例詳解

    Python讀寫文件模式和文件對象方法實例詳解

    這篇文章主要介紹了Python讀寫文件模式和文件對象方法,結(jié)合實例形式詳細分析了Python文件操作常用技巧與相關(guān)注意事項,需要的朋友可以參考下
    2019-09-09
  • python字符串格式化函數(shù)

    python字符串格式化函數(shù)

    這篇文章主要介紹了python字符串格式化函數(shù),主要概述內(nèi)容有?格式化字符串輸出?、三引號、字符串字母處理函數(shù)等相關(guān)內(nèi)容,下文詳細內(nèi)容介紹需要的小伙伴可以參考一下
    2022-04-04
  • 用Python畫圣誕樹代碼示例

    用Python畫圣誕樹代碼示例

    大家好,本篇文章主要講的是用Python畫圣誕樹代碼示例,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Python pandas 列轉(zhuǎn)行操作詳解(類似hive中explode方法)

    Python pandas 列轉(zhuǎn)行操作詳解(類似hive中explode方法)

    這篇文章主要介紹了Python pandas 列轉(zhuǎn)行操作詳解(類似hive中explode方法),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 檢測tensorflow是否使用gpu進行計算的方式

    檢測tensorflow是否使用gpu進行計算的方式

    今天小編就為大家分享一篇檢測tensorflow是否使用gpu進行計算的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python中copy()與deepcopy()的區(qū)別小結(jié)

    python中copy()與deepcopy()的區(qū)別小結(jié)

    接觸python有一段時間了,一直沒有系統(tǒng)的學(xué)習(xí)過,也對copy,deepcoy傻傻的分不清,故抽出時間來理一下。 下面這篇文章主要給大家介紹了關(guān)于python中copy()與deepcopy()的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2018-08-08
  • pandas?修改列名的實現(xiàn)示例

    pandas?修改列名的實現(xiàn)示例

    本文主要介紹了pandas修改列名的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評論