婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Python為什么不用設計模式

詳解Python為什么不用設計模式

熱門標簽:煙臺電話外呼營銷系統(tǒng) 上海正規(guī)的外呼系統(tǒng)最新報價 如何地圖標注公司 外賣地址有什么地圖標注 銀川電話機器人電話 電銷機器人錄音要學習什么 長春極信防封電銷卡批發(fā) 企業(yè)彩鈴地圖標注 預覽式外呼系統(tǒng)

前言

剛剛看了EuroPython 2017一篇演講,Why You Don't Need Design Patterns in Python,為什么python不用設計模式。演講者是STXNEXT的Sebastian Buczynski。

他對設計模式的定義是:

  • 常見問題的通用可復用解決方案
  • 定型的最佳實踐

他說設計模式是一種似曾相識(Anology),是一種大綱(Outline),他認為設計模式并不是拿來就能用的。

Singleton

第一個是Singleton模式,Singleton的精髓就是任何時候,只有一個類的實例。

《設計模式》里面給出的Singleton代碼是

聲明:

class Singleton {
public:
	static Singleton* Instance();
protected:
	Singleton();
private:
	static Singleton* _instance;
};

實現(xiàn):

Singleton* Singleton::_instance = 0;

Sebastian 在 Google 上面找Singleton的Python實現(xiàn),找到了以下代碼:

聲明:

class Singleton:
	_instance = None
	def __new__(cls, *args, **kwargs):
		if not cls._instance:
			cls._instance = super().__new__(cls, *args, **kwargs)
		return cls._instance

實現(xiàn):

one_instance = Singleton()
another_instance = Singleton()
one_instance is another_instance # True

Sebastian指出,照抄C++,當然也可以解決問題,但是在python里面有更好的解決方案。比如,可以用@classmethod。不過,最好的解決方案是直接用module。因為module本身就是唯一的,相當于module就實現(xiàn)了singleton,那么,我們?yōu)槭裁匆筚M周章,搞一個singleton出來呢?

我回憶了一下,盡管Singleton是最簡單的設計模式了,但是,我這么多年一直沒用。以前寫C#的時候,我用的是靜態(tài)類,靜態(tài)類本身就是唯一的,所以我不需要singleton。當然,我看到有人也用C#寫了和C++一樣的Singleton,但是我覺得解決問題就可以了,沒必要為了寫設計模式而寫設計模式。同樣,寫VB.net的時候,我直接用的module,也不需要singleton。

結論:當年《設計模式》里面的Singleton模式,是為了只有一個類實例。如果編程語言本身,如python, c#, vb.net,已經(jīng)提供了這樣的能力,就沒有必要再用C++的套路了。或者說,設計模式就不需要了。

Facade


(以上圖片來自參考[1])

Facade的基本概念是,子系統(tǒng)用Facade來屏蔽內(nèi)部的復雜實現(xiàn)。

這時,我們可以把子系統(tǒng)的python文件統(tǒng)一放在一個文件夾里,然后在這個文件夾里放一個__init__.py文件。

Command

Command模式把請求封裝成對象。

Sebastian認為,在python里面,函數(shù)就是一等公民,所以沒有必要創(chuàng)建對象。

def command(discount_rate):
some_obj.notify_users_about_discount()

也可以用functools創(chuàng)建command

import functools
command = functools.partial(
some_obj.notify_users_about_discount, discount_rate=0.5
)
command()
# equals to
some_obj.notify_users_about_discount(discount_rate=0.5)

Visitor

Python里面沒有接口,沒有方法重載。那么怎么實現(xiàn)Visitor呢?

Sebastian指出,可以用@SingleDispatch。

from functools import singledispatch
@singledispatch
def visit(node):
	type_name = type(node).__name__
	raise AttributeError(f'No handler found for {type_name}')
from ast_nodes import Assign, FunctionDef
@visit.register(Assign)
def visit(node):
	pass
@visit.register(FunctionDef)
def visit(node):
	pass

我們看到,這里的實現(xiàn),并沒有class。

Decorator

Decorator可以用來擴展一個對象。

它實現(xiàn)的方法是新建一個類,這個類和原來的類屬于同一個接口。然后這個類接受一個原來的類的對象,每個方法都調(diào)用原來的類的方法。

如果套用c++的《設計模式》,我們有

class OriginalClass:
	def get_text(self):
		pass
	def get_number(self):
		pass

    
class Decorator:
	def __init__(self, decorated_obj):
		self.decorated_obj = decorated_obj
	def get_text(self):
		return f'b>{self.decorated_obj.get_text()}/b>'
	def get_number(self):
		return self.decorated_obj.get_number()

但是,這里可以用python的__getattr__特性來簡化實現(xiàn)。

class Decorator:
	def __init__(self, decorated_obj):
		self.decorated_obj = decorated_obj
	def get_text(self):
		return f'{self.decorated_obj.get_text()}'
	def __getattr__(self, attr_name):
		return getattr(self.decorated_obj, attr_name)

總結

Sebastian指出,python非常靈活。和25年前的C++大相徑庭。很多地方,都非常容易插入邏輯。過去的設計模式,可能并不適用了。我們應該很好的了解python,并借鑒其他語言,而不是生搬硬套。

我覺得,再好的東西,也要和實際相結合。任何脫離實際的做法,都是多余的,甚至有害的。任何理論,方法的產(chǎn)生,都有當時的歷史背景,技術背景。如果不了解背后的機制,不了解背后的精神和目的,而是專注于招式本身,那只能是越來越僵化。看似堅持,實際上是背叛。堅持是說固執(zhí)的堅持原來的做法,背叛是指背叛了初衷。

參考

[1] Why You Don't Need Design Patterns in Python

[2] Design Patterns – Elements of Reusable Object-Oriented Software

到此這篇關于詳解Python為什么不用設計模式的文章就介紹到這了,更多相關Python設計模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python設計模式大全
  • python3 簡單實現(xiàn)組合設計模式
  • python 最簡單的實現(xiàn)適配器設計模式的示例
  • 詳解Python設計模式之策略模式
  • PageFactory設計模式基于python實現(xiàn)
  • python單例設計模式實現(xiàn)解析
  • Python PO設計模式的具體使用

標簽:湖北 西寧 佳木斯 珠海 盤錦 上饒 潮州 宜昌

巨人網(wǎng)絡通訊聲明:本文標題《詳解Python為什么不用設計模式》,本文關鍵詞  詳解,Python,為什么,不用,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Python為什么不用設計模式》相關的同類信息!
  • 本頁收集關于詳解Python為什么不用設計模式的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    在线成人免费视频| 视频一区在线视频| 日韩精品一区二区三区在线| 91黄色小视频| 91色视频在线| 97精品国产97久久久久久久久久久久 | 久久99国产精品尤物| 午夜国产精品一区| 天天爽夜夜爽夜夜爽精品视频| 一区二区在线观看视频在线观看| 亚洲精品免费在线| 亚洲最新视频在线观看| 亚洲一区视频在线观看视频| 亚洲免费观看高清完整版在线观看 | av在线综合网| 91色婷婷久久久久合中文| 一本久久精品一区二区| 91国偷自产一区二区三区观看 | 日本欧美久久久久免费播放网| 日韩在线卡一卡二| 久久精品理论片| 国产精品影视在线观看| 北条麻妃一区二区三区| 在线一区二区三区四区| 日韩女优视频免费观看| 国产精品天美传媒| 亚洲男帅同性gay1069| 亚洲高清不卡在线观看| 精品一区二区三区香蕉蜜桃| 丁香六月综合激情| 欧美中文字幕不卡| 久久综合九色欧美综合狠狠| 亚洲欧洲三级电影| 日韩在线一区二区| 99在线精品一区二区三区| 欧美三级视频在线观看| 久久综合色婷婷| 国产精品成人午夜| 日韩va亚洲va欧美va久久| 国产一区二三区| 成人av影视在线观看| 欧美日韩国产精品自在自线| 久久综合久久综合亚洲| 亚洲一区在线观看视频| 麻豆91小视频| 在线一区二区三区四区五区| 久久综合九色欧美综合狠狠| 亚洲国产综合91精品麻豆| 国产精品一线二线三线| 欧美日韩成人激情| 亚洲欧洲一区二区三区| 国产精品一区二区在线播放| 欧美日韩一区国产| 日本一区二区三区四区在线视频| 午夜精品福利一区二区蜜股av | 亚洲一区在线播放| 成人v精品蜜桃久久一区| 日韩欧美一区二区三区在线| 亚洲综合男人的天堂| 成人性视频网站| 欧美哺乳videos| 午夜精品久久久久久久久久| 91视频com| 国产精品久久久久久一区二区三区| 久久精品国内一区二区三区| 欧美日韩国产一二三| 亚洲精品乱码久久久久久| 成人中文字幕电影| 国产午夜精品一区二区三区嫩草| 喷白浆一区二区| 欧美日韩mp4| 亚洲123区在线观看| 欧美专区日韩专区| 亚洲一区二区在线观看视频| 91蜜桃网址入口| 成人欧美一区二区三区黑人麻豆| 国产99久久久久| 国产欧美综合在线观看第十页| 精品制服美女丁香| 久久久久久久一区| 国产经典欧美精品| 日本一区二区三区国色天香 | 欧美综合视频在线观看| 最新日韩av在线| 日本韩国欧美三级| 亚洲妇熟xx妇色黄| 欧美一级免费大片| 国产一区在线观看麻豆| 中文文精品字幕一区二区| 99国产精品久久久| 樱花影视一区二区| 欧美一区二区女人| 国产一区二区久久| 日韩一区在线播放| 欧美区视频在线观看| 秋霞国产午夜精品免费视频| 精品粉嫩超白一线天av| 成人免费高清在线| 亚洲韩国一区二区三区| 精品国产污污免费网站入口 | 91丨国产丨九色丨pron| 亚洲欧美一区二区三区久本道91 | 中文字幕一区二区三区色视频| 在线一区二区视频| 久久aⅴ国产欧美74aaa| 国产日韩欧美电影| 日本韩国视频一区二区| 久久不见久久见免费视频1| 国产精品第一页第二页第三页| 欧美三级在线看| 国产精品一二三在| 亚洲一区二区在线免费看| 久久亚洲精品国产精品紫薇| 色先锋资源久久综合| 激情六月婷婷久久| 一二三区精品视频| 久久老女人爱爱| 欧美蜜桃一区二区三区| 国产精品一区一区三区| 成人免费黄色在线| 91丝袜美腿高跟国产极品老师 | 亚洲影视在线播放| 久久久精品一品道一区| 欧美日本免费一区二区三区| 成人午夜激情在线| 精品一区二区三区影院在线午夜 | 欧美一区二区日韩| 色94色欧美sute亚洲线路一久| 韩国女主播一区| 日韩不卡在线观看日韩不卡视频| 亚洲免费在线视频一区 二区| 精品久久久网站| 欧美日韩国产一二三| 欧美中文字幕亚洲一区二区va在线| 国产精品一区不卡| 久久97超碰色| 美女视频黄 久久| 亚洲国产cao| 亚洲美女屁股眼交3| 国产精品传媒入口麻豆| 中文字幕高清一区| 国产午夜精品在线观看| 久久毛片高清国产| 精品国产一区二区精华| 精品国产免费久久| 日韩亚洲欧美在线观看| 欧美一区二视频| 欧美日韩成人综合| 91精品久久久久久蜜臀| 91精品在线麻豆| 欧美一区二区三区免费在线看| 欧美日韩午夜在线视频| 在线不卡免费av| 欧美一级理论性理论a| 欧美一区二区黄| 91精品国产综合久久蜜臀| 日韩欧美国产一二三区| 精品国产乱码久久久久久夜甘婷婷| 日韩三区在线观看| 精品国产人成亚洲区| 国产亚洲精品7777| 国产精品福利一区| 一区二区三区欧美| 日韩精品1区2区3区| 韩国理伦片一区二区三区在线播放| 蜜芽一区二区三区| 国产成人精品一区二区三区网站观看 | 一区二区三区精品久久久| 亚洲欧美一区二区久久| 亚洲欧洲另类国产综合| 亚洲电影一区二区| 国内精品国产成人| 成人动漫av在线| 欧美人妖巨大在线| 精品剧情v国产在线观看在线| 久久久精品影视| 亚洲日本在线天堂| 奇米精品一区二区三区在线观看一| 极品少妇xxxx精品少妇| 91在线一区二区| 91精品国产91久久综合桃花| 精品国产91洋老外米糕| 亚洲色欲色欲www| 美腿丝袜亚洲综合| 成人开心网精品视频| 欧美三级蜜桃2在线观看| 久久影院午夜片一区| 亚洲综合免费观看高清完整版| 免费成人在线网站| 91猫先生在线| 精品嫩草影院久久| 最新欧美精品一区二区三区| 玖玖九九国产精品| 91蝌蚪porny| 国产欧美日韩在线| 日韩精品一区第一页| 91在线免费播放| 国产日韩欧美激情| 久久精品国内一区二区三区| 欧美视频在线一区|