校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

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

詳解Python為什么不用設(shè)計模式

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

前言

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

他對設(shè)計模式的定義是:

  • 常見問題的通用可復(fù)用解決方案
  • 定型的最佳實(shí)踐

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

Singleton

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

《設(shè)計模式》里面給出的Singleton代碼是

聲明:

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

實(shí)現(xiàn):

Singleton* Singleton::_instance = 0;

Sebastian 在 Google 上面找Singleton的Python實(shí)現(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

實(shí)現(xiàn):

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

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

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

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

Facade


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

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

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

Command

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

Sebastian認(rèn)為,在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里面沒有接口,沒有方法重載。那么怎么實(shí)現(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

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

Decorator

Decorator可以用來擴(kuò)展一個對象。

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

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

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__特性來簡化實(shí)現(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)

總結(jié)

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

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

參考

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

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

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

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Python為什么不用設(shè)計模式》,本文關(guān)鍵詞  詳解,Python,為什么,不用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Python為什么不用設(shè)計模式》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解Python為什么不用設(shè)計模式的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    首页亚洲欧美制服丝腿| 国产精品国产a| 麻豆中文一区二区| 亚洲私人黄色宅男| 国产校园另类小说区| 日韩欧美国产麻豆| 欧美裸体一区二区三区| 在线观看视频一区二区| 欧美专区亚洲专区| 欧美色中文字幕| 欧美三电影在线| 欧美日本韩国一区二区三区视频| 欧亚洲嫩模精品一区三区| 97aⅴ精品视频一二三区| 色一情一伦一子一伦一区| 色噜噜偷拍精品综合在线| 91久久精品网| 91精品国产综合久久蜜臀| 欧美一区二区三区影视| 精品久久久久久久久久久久包黑料 | 欧美高清视频不卡网| 欧美日韩成人综合天天影院| 在线播放欧美女士性生活| 日韩写真欧美这视频| 久久久久九九视频| 亚洲欧美日本韩国| 免费在线观看视频一区| 风间由美一区二区三区在线观看 | 免费成人深夜小野草| 国产一区二区三区不卡在线观看| 成人一区二区三区视频在线观看 | 欧美日韩国产在线播放网站| 日韩精品一区二区三区老鸭窝| 国产亚洲女人久久久久毛片| 亚洲精品欧美专区| 国产在线一区观看| 在线一区二区三区四区五区| 精品美女在线播放| 亚洲妇女屁股眼交7| 国产在线播放一区三区四| 色综合久久88色综合天天6| 日韩欧美国产系列| 亚洲一区视频在线| 国产成人精品午夜视频免费| 欧美日韩日日夜夜| 国产精品国产三级国产有无不卡| 丝袜美腿亚洲一区| 色88888久久久久久影院按摩 | 国产亚洲一本大道中文在线| 亚洲成av人片一区二区三区| 国产精品小仙女| 69堂成人精品免费视频| 亚洲欧美一区二区三区国产精品 | 99久久精品国产毛片| 精品美女一区二区三区| 婷婷六月综合亚洲| 色综合激情久久| 国产亚洲精品7777| 免费在线观看精品| 欧美日韩国产在线观看| 亚洲欧美区自拍先锋| 国产成人av电影在线播放| 日韩一区二区在线看| 亚洲一区在线看| 91色在线porny| 国产精品天干天干在观线| 国产一区二三区| 精品国内二区三区| 毛片基地黄久久久久久天堂| 欧美日韩国产综合视频在线观看| 一区二区三区四区中文字幕| 色综合久久综合| 亚洲女厕所小便bbb| 99re亚洲国产精品| 18成人在线视频| 91性感美女视频| 一区二区在线观看免费| 日本乱人伦aⅴ精品| 亚洲欧美日韩小说| 在线视频国内自拍亚洲视频| 亚洲人xxxx| 欧美人妇做爰xxxⅹ性高电影| 午夜精品国产更新| 日韩欧美国产精品一区| 国产在线播放一区三区四| 欧美激情中文字幕一区二区| 成人精品鲁一区一区二区| 国产精品久久久久久久第一福利 | 精品一区二区三区不卡| 精品国产青草久久久久福利| 精品一区二区三区蜜桃| 国产视频一区不卡| 99视频在线观看一区三区| 一区二区三区在线免费播放| 欧美性色黄大片| 水蜜桃久久夜色精品一区的特点| 91精品国产美女浴室洗澡无遮挡| 日韩电影免费一区| 久久精品一区二区三区不卡牛牛| 国产成人aaaa| 亚洲小说春色综合另类电影| 欧美日韩国产一级| 国产乱码精品一区二区三区av| 国产婷婷色一区二区三区四区| 本田岬高潮一区二区三区| 亚洲一卡二卡三卡四卡| 欧美一区二区福利在线| 国产福利一区二区三区在线视频| 国产精品第五页| 欧美区视频在线观看| 激情文学综合网| 亚洲精品乱码久久久久久黑人| 91精品国产综合久久精品性色| 久久99深爱久久99精品| 综合自拍亚洲综合图不卡区| 欧美精品久久久久久久久老牛影院| 国产在线麻豆精品观看| 亚洲裸体xxx| 久久综合久久久久88| 色综合久久九月婷婷色综合| 久久99热99| 亚洲一区二区三区三| 国产丝袜在线精品| 欧美一区二区在线视频| 成人高清视频在线| 麻豆精品一区二区av白丝在线 | 狠狠色丁香久久婷婷综| 亚洲午夜视频在线观看| 久久这里只有精品视频网| 91精品在线免费| 久久综合九色综合欧美就去吻| 欧美日韩中文字幕一区二区| 欧美在线三级电影| 日韩欧美国产综合| 欧美日韩国产不卡| 国内精品自线一区二区三区视频| 中文字幕乱码亚洲精品一区| 欧美性大战久久久| 成人黄色在线看| 麻豆中文一区二区| 亚洲mv大片欧洲mv大片精品| 国产欧美综合色| 欧美一卡在线观看| 成人听书哪个软件好| 欧洲中文字幕精品| 欧美成人a在线| 在线免费观看不卡av| 国内久久婷婷综合| 激情五月播播久久久精品| 日韩影视精彩在线| 五月婷婷激情综合网| 国产色产综合产在线视频| 欧美一级高清大全免费观看| 欧美大片一区二区| 青青草成人在线观看| 亚洲男人的天堂在线aⅴ视频| 日韩欧美在线网站| 喷白浆一区二区| 99久久夜色精品国产网站| 亚洲成人资源在线| 日本一区二区三级电影在线观看| 国产精品久久久久久亚洲毛片| 成人做爰69片免费看网站| 久久99久久99| 麻豆国产91在线播放| 日韩激情一二三区| 午夜激情久久久| 亚洲国产日韩一区二区| 亚洲精品视频免费看| 国产精品第一页第二页第三页| 中文字幕成人在线观看| 国产人妖乱国产精品人妖| 欧美国产日韩在线观看| 国产精品午夜免费| 国产精品嫩草久久久久| 国产精品久久福利| 亚洲三级视频在线观看| 一区二区免费在线| 婷婷国产v国产偷v亚洲高清| 日韩在线观看一区二区| 精品一区二区免费| 丁香六月久久综合狠狠色| 粉嫩蜜臀av国产精品网站| 91在线视频免费91| 欧美日韩激情在线| 日韩免费性生活视频播放| 久久网站热最新地址| 国产精品麻豆一区二区| 亚洲精品国产视频| 日本欧美大码aⅴ在线播放| 美女在线视频一区| 国产91精品在线观看| 欧美在线综合视频| 日韩欧美你懂的| 国产精品久久久久久妇女6080| 午夜视频在线观看一区二区三区| 精品一区二区三区在线观看 | 精品国产成人在线影院 | 久久精品理论片| 不卡一区中文字幕|