我正在尋找提供最佳實踐,設計模式和使用Python的SOLID原則示例的任何資源。python設計模式
回答
一些重疊在這些
Intermediate and Advanced Software Carpentry in Python
Code Like a Pythonista: Idiomatic Python
Google Developers Day US - Python Design Patterns
另一個資源是由例如在Python Recipes。相當數量不遵循最佳做法,但你可以找到一些有圖案,有用
欲瞭解更多深入瞭解設計pattners,你應該看看Design Patterns: Elements of Reusable Object-Oriented Software。源代碼不在Python中,但它不需要讓你理解模式。
我認爲理解如何使用慣用的python來實現設計模式非常重要。它與GOF中使用的C++語言完全不同,因此從C++移植到python將導致非pythonic代碼。 – ierax 2011-07-31 20:29:17
我傾向於不同意。無論是Python,Java還是C++,任何OO語言都可以使用單例DP或其他DP。你認爲什麼是非pythonic? – 2012-02-23 21:13:18
第一個鏈接是一篇相當差的論文,有很多關於Python的錯誤斷言。目前第二個404的,因此,我想,做得少得多:) – 2012-07-26 21:56:42
您也不妨讀一讀這article(選擇.pdf文件),其中討論了在面向對象的動態語言的設計模式(即蟒蛇)。引用該頁:
本文探討了如何使用動態更高階的問題解決類似問題時,通常稱爲「四人幫」或「GOF」 ,面向對象的編程語言。一些模式消失 - 也就是說,它們直接受到語言特徵的支持,一些模式更簡單或者有不同的重點,有些模式基本不變。
布魯斯Eckel的 「Thinking in Python」 設計模式
在Python控制檯類型
>>> import this
嚴重傾斜。
雖然這通常被視爲一個(罰款!)笑話,它包含了一些有效的python特定公理。
在調用可能存在或不存在的對象上的屬性時,可以用來簡化代碼的東西是使用Null Object Design Pattern(我在Python Cookbook中引入的對象)。
粗略地說,與空對象的目標是提供一種「智能」 替換爲其他語言的在Python或 空經常使用的原始數據類型沒有限制(或空指針)。這些用於許多目的,包括一些重要情況,其中一些組別的其中一個成員 由於任何原因是特殊的。大多數 通常會導致條件語句區分 普通元素和原始Null值。
該對象只是吃缺乏屬性錯誤,你可以避免檢查它們的存在。
這無非
class Null(object):
def __init__(self, *args, **kwargs):
"Ignore parameters."
return None
def __call__(self, *args, **kwargs):
"Ignore method calls."
return self
def __getattr__(self, mname):
"Ignore attribute requests."
return self
def __setattr__(self, name, value):
"Ignore attribute setting."
return self
def __delattr__(self, name):
"Ignore deleting attributes."
return self
def __repr__(self):
"Return a string representation."
return "<Null>"
def __str__(self):
"Convert to a string and return it."
return "Null"
有了這個,如果你這樣做Null("any", "params", "you", "want").attribute_that_doesnt_exists()
它不會爆炸,但只是默默地成爲pass
相當。
通常情況下你會做這樣的事情
if obj.attr:
obj.attr()
有了這個,你只是做:
obj.attr()
,並忘掉它。請注意,廣泛使用Null
對象可能會隱藏代碼中的錯誤。
- 1. Python的設計模式
- 2. Python後端設計模式
- 3. 設計模式
- 4. 設計模式:
- 5. 設計模式
- 6. 設計模式
- 7. 設計模式
- 8. 設計模式
- 9. 設計模式
- 10. 設計模式?
- 11. 設計模式
- 12. Python的二傳手設計模式
- 13. Python設計模式,交叉導入
- 14. Python的API包裝設計模式
- 15. Python的對象池設計模式
- 16. Python的觀察者設計模式
- 17. MVC設計模式 - 設計模型
- 18. MVC4設計模式
- 19. Singleton設計模式
- 20. 設計模式,在
- 21. DAO設計模式
- 22. Observer設計模式
- 23. OOP設計模式
- 24. C++設計模式
- 25. MapMaker設計模式?
- 26. SQL設計模式
- 27. OOPS(設計模式)
- 28. PHP設計模式
- 29. PostgreSQL模式設計
- 30. Java:Builder設計模式
Duplicate:http://stackoverflow.com/questions/127377/programming-languages-and-design-patterns,http://stackoverflow.com/questions/546479/do-oo-design-principles-apply-to -python,http://stackoverflow.com/questions/112358/what-are-some-good-web-resources-for-learning-object-oriented-programming – 2009-03-04 12:21:19
https://github.com/faif/python-patterns /blob/master/README.md – 2017-03-02 12:48:57