【发布时间】:2010-10-11 00:34:53
【问题描述】:
我正在寻找任何提供 Python 最佳实践、设计模式和 SOLID 原则示例的资源。
【问题讨论】:
我正在寻找任何提供 Python 最佳实践、设计模式和 SOLID 原则示例的资源。
【问题讨论】:
Bruce Eckel 的 Thinking in Python 非常依赖设计模式
【讨论】:
【讨论】:
在调用可能存在或可能不存在的对象的属性时,您可以使用Null Object Design Pattern(我在Python Cookbook 中对此进行了介绍)来简化代码。
大致而言,Null 对象的目标是提供“智能” 替换 Python 中常用的原始数据类型 None 或 其他语言中的 Null(或 Null 指针)。这些用于许多 目的,包括某个组的一名成员的重要情况 无论出于何种原因,其他相似的元素都是特殊的。最多 这通常会导致条件语句来区分 普通元素和原始 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 对象可能会隐藏代码中的错误。
【讨论】:
类型
>>> import this
在 Python 控制台中。
虽然这通常被视为(很好!)笑话,但它包含几个有效的特定于 python 的公理。
【讨论】:
您可能还希望阅读此article(选择 .pdf 文件),其中讨论了动态面向对象语言(即 Python)中的设计模式。引用页面:
本文探讨了当使用动态、高阶、面向对象的编程语言解决类似问题时,通常称为“Gang of Four”或“GOF”一书中的模式如何出现。一些模式消失了——也就是说,它们被语言特性直接支持,一些模式更简单或有不同的侧重点,还有一些本质上没有变化。
【讨论】:
要更深入地了解设计模式,您应该查看Design Patterns: Elements of Reusable Object-Oriented Software。源代码不在 Python 中,但您无需了解这些模式。
【讨论】: