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

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

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

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

前言

剛剛看了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;
};

實現:

Singleton* Singleton::_instance = 0;

Sebastian 在 Google 上面找Singleton的Python實現,找到了以下代碼:

聲明:

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

實現:

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

Sebastian指出,照抄C++,當然也可以解決問題,但是在python里面有更好的解決方案。比如,可以用@classmethod。不過,最好的解決方案是直接用module。因為module本身就是唯一的,相當于module就實現了singleton,那么,我們為什么要大費周章,搞一個singleton出來呢?

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

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

Facade


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

Facade的基本概念是,子系統用Facade來屏蔽內部的復雜實現。

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

Command

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

Sebastian認為,在python里面,函數就是一等公民,所以沒有必要創建對象。

def command(discount_rate):
some_obj.notify_users_about_discount()

也可以用functools創建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里面沒有接口,沒有方法重載。那么怎么實現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

我們看到,這里的實現,并沒有class。

Decorator

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

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

如果套用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__特性來簡化實現。

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,并借鑒其他語言,而不是生搬硬套。

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

參考

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

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

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

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

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

巨人網絡通訊聲明:本文標題《詳解Python為什么不用設計模式》,本文關鍵詞  詳解,Python,為什么,不用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Python為什么不用設計模式》相關的同類信息!
  • 本頁收集關于詳解Python為什么不用設計模式的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    丝袜亚洲精品中文字幕一区| 欧美午夜在线观看| 国产精品美女久久久久高潮| 7777精品伊人久久久大香线蕉超级流畅 | 欧美日本在线观看| 在线亚洲一区二区| 99视频精品全部免费在线| 成人精品鲁一区一区二区| 波多野结衣一区二区三区| av电影在线不卡| 91久久久免费一区二区| 91麻豆精品国产91久久久久久久久 | 欧美一区二区三区在线视频| 日韩视频一区二区| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲女同ⅹxx女同tv| 亚洲第一在线综合网站| 美腿丝袜亚洲三区| 成人免费电影视频| 日韩欧美在线影院| 一区二区三区丝袜| 91农村精品一区二区在线| 欧美主播一区二区三区| 亚洲精品成人悠悠色影视| 亚洲精品精品亚洲| 五月激情综合网| 国产乱码精品一区二区三| jizzjizzjizz欧美| 欧美成人a视频| 国产精品乱人伦中文| 男人的天堂亚洲一区| 99视频国产精品| 中文字幕国产一区| 99久久免费视频.com| 精品国产99国产精品| 午夜精品在线看| 色噜噜狠狠色综合中国| 日本一二三四高清不卡| 国产精品99久久久久久久女警| 一区二区三区视频在线观看| 亚洲综合精品自拍| 91麻豆123| 国产激情精品久久久第一区二区| 日韩视频一区二区三区在线播放| 久久福利资源站| 国产女人aaa级久久久级| 91美女片黄在线观看91美女| 国产精品福利一区二区| 99久久精品国产一区二区三区| 中文字幕永久在线不卡| 欧美网站大全在线观看| 中文字幕亚洲一区二区va在线| 国产精品123区| 亚洲成a人片在线不卡一二三区| 欧美三级电影一区| 男女视频一区二区| 国产亚洲精品超碰| 99re视频精品| 国产一区激情在线| 亚洲一区二区欧美| 精品成人一区二区三区四区| av激情综合网| 国产一区二区三区黄视频 | 精品久久久久久久久久久久久久久| 美女爽到高潮91| 亚洲欧美乱综合| 亚洲国产成人在线| 5566中文字幕一区二区电影| aaa国产一区| 秋霞电影网一区二区| 夜夜精品浪潮av一区二区三区| 精品捆绑美女sm三区| 欧美视频在线一区二区三区| 国产电影一区二区三区| 国产一区二区三区蝌蚪| 蜜桃免费网站一区二区三区| 一区二区三区不卡视频| 国产亚洲va综合人人澡精品 | 亚洲美女视频一区| 国产精品精品国产色婷婷| 91精品国产综合久久久蜜臀图片 | 日日骚欧美日韩| 国产精品福利av| 成人免费一区二区三区在线观看| 久久精品亚洲精品国产欧美 | 欧美一区二区三区性视频| 日欧美一区二区| 亚洲成人第一页| 国产目拍亚洲精品99久久精品| 色综合久久66| 欧美三级中文字幕在线观看| 成人免费黄色大片| 99久久99久久综合| 91色|porny| 欧美精品日日鲁夜夜添| 欧美r级在线观看| 精品欧美一区二区三区精品久久| 欧美大尺度电影在线| 国产精品私人影院| 亚洲国产cao| 国产麻豆精品久久一二三| 国产麻豆成人精品| 欧美高清视频一二三区 | 日韩精品久久久久久| 国产91清纯白嫩初高中在线观看| 91国在线观看| 中文字幕不卡的av| 秋霞午夜av一区二区三区| 97精品超碰一区二区三区| 精品国一区二区三区| 一区二区三区国产| av亚洲产国偷v产偷v自拍| 精品久久久网站| 免费成人你懂的| 欧美区视频在线观看| 亚洲精品视频免费看| 成人av在线播放网址| 国产精品国模大尺度视频| 麻豆成人av在线| 久久婷婷成人综合色| 午夜av电影一区| 欧美精选午夜久久久乱码6080| 亚洲乱码国产乱码精品精可以看| 成人激情电影免费在线观看| 国产精品丝袜一区| 成人性生交大片免费看中文网站| 国产欧美一区二区三区网站| 黄色小说综合网站| 中文字幕日韩精品一区| 欧美理论在线播放| 日韩福利电影在线观看| 精品国产乱码久久久久久老虎| 韩国一区二区在线观看| 日本一区二区在线不卡| 色婷婷国产精品久久包臀| 天堂成人国产精品一区| 亚洲精品在线网站| 不卡一区在线观看| 日韩黄色在线观看| 国产精品美女久久福利网站| 欧美日韩专区在线| 波多野结衣亚洲| 久久99最新地址| 亚洲素人一区二区| 久久亚洲春色中文字幕久久久| 91免费国产在线观看| 日日夜夜一区二区| 国产精品麻豆网站| 日韩欧美电影在线| 欧美狂野另类xxxxoooo| 97久久超碰精品国产| 国产九九视频一区二区三区| 亚洲成人av福利| 亚洲国产精品久久不卡毛片| 国产日韩欧美制服另类| 精品国产伦一区二区三区观看方式| 在线观看亚洲专区| 色网综合在线观看| 一本久道久久综合中文字幕| 成人av网站大全| 国产suv精品一区二区6| 粉嫩av亚洲一区二区图片| 国产精品一二三四区| 国产精品一区在线| 国产精品综合网| 国产91在线观看丝袜| 高清成人免费视频| 99久久精品免费看国产| 日本道在线观看一区二区| 在线免费观看不卡av| 538在线一区二区精品国产| 色综合色综合色综合色综合色综合 | 在线国产电影不卡| 91麻豆精品国产91久久久资源速度 | 国产精品久久久久久亚洲伦| 日韩一区二区三区四区五区六区| 91精品欧美久久久久久动漫| 欧美久久一二区| 国产亚洲精品7777| 亚洲成在人线在线播放| 亚洲综合久久久| 国产激情一区二区三区四区| 国产一区二三区好的| 在线日韩一区二区| 国产午夜久久久久| 免费日韩伦理电影| 欧美性一区二区| 日韩一区中文字幕| 国产一区二区三区日韩| 欧美影院精品一区| 成人欧美一区二区三区小说| 激情偷乱视频一区二区三区| 欧美老女人在线| 一区二区三区中文字幕在线观看| 国产成人精品免费网站| 91精品国产综合久久福利软件| 一二三四社区欧美黄| 色婷婷久久综合| 亚洲日本一区二区| 99久久99久久精品国产片果冻|