Python设计指南:

我是一位非常有经验的开发人员 – 多年来在Delphi,C#和C方面做了很多繁重的工作.我一直非常重视结构化编程,OOP,松耦合模块化设计等指南 – 因为我使用的所有语言都有内置的强制执行这些概念的方法 – 访问控制,静态类型,接口和抽象类支持等 – 我依靠这些来构建我的代码.

现在,我已经用Python乱画了几个月.我对它的许多精彩功能印象深刻 – 但我非常怀念内置的约束,这使得代码模块化和组织变得容易.而且,不幸的是,我看到很多用Python编写的“意大利面条代码”,甚至来自非常可敬的来源.我不会单独出去任何人,但是我有一些由大联盟pythonistas编写的书籍,其中充满了充满设计的例子(更好的说 – “反设计”)让我不寒而栗.在我看来,因为Python很容易使用,所以它也很容易被滥用.

我在Python编写代码时会尝试自我约束,但我发现需要执行大量额外的工作,而且我必须根据自己的设计记忆设置并遵守约束,而无需语言帮助一点都不而且由于没有“编译时间”检查,这是非常困难的 – 通常你不会发现设计缺陷,直到你真正运行该段代码.

所以,我正在寻找非常具体的信息:一些例子或更好的仍然是一本关于WELL STRUCTURED Python设计和设计技术的书 – 如何最好地实现封装,间接,非常松散耦合的设计等.

来自一位着名的Python书籍作者的糟糕设计IMO – (混淆)

def populateList(self,selecteddisk=None):
selected = None ***#Bundling - coupling:*** 
self.listWidget.clear()
for disk in self.disks.inOrder():
item = QListWidgetItem(QString("%1 of %2/%3 (%L4)") \
.arg(disk.name).arg(disk.owner).arg(disk.country) \
.arg(disk.teu))
self.listWidget.addItem(item)
***#Bundling - coupling:*** 
if selecteddisk is not None and selecteddisk == id(disk):
    selected = item
    if selected is not None:
    selected.setSelected(True)
    self.listWidget.setCurrentItem(selected)
最佳答案
我发现在编译之前编写代码本身时,实现和编译遵循约束的代码需要花费很多额外的工作,这些代码只是基于我自己的设计内存而没有语言的帮助.有些IDE会提供帮助,但语言本身并没有给我任何帮助.

而且,由于“编译时间”检查似乎永远不会帮助我找到普通的逻辑错误,因此它更加困难 – 通常在实际运行该段代码之前,您不会发现设计缺陷.

Python designs and design techniques …
how to best implement encapsulation,

通过封装.在像Java和C这样的语言中,“封装”已经发展成“在整个地方使用私有东西”.在Python中,根本不支持.

我们都是成年人.

你仍然像其他语言一样进行封装.但是,如果没有私有这个词.

Python为__getattribute__提供了属性,装饰器和覆盖,以实现各种封装技术.

indirection,

通过引用其他对象.我不清楚你在这里遇到了什么具体问题,但也许你已经将一些错误类型的参数传递给了一个函数.避免这种情况的方法是阅读您为自己编写的文档字符串.

very loosely coupled designs,etc.

通过依赖注入.再次.就松散耦合而言,Python就像其他语言一样工作.

你应该大量调查 – 并使用 – docstrings.

您可能希望使用http://sphinx.pocoo.org从文档字符串生成漂亮的文档.

您还可以使用Python的内置help()函数来读取编写代码时编写的文档字符串.

相关文章

在这篇文章中,我们深入学习了XPath作为一种常见的网络爬虫技巧。XPath是一种用于定位和选择XML文档中特...
祝福大家龙年快乐!愿你们的生活像龙一样充满力量和勇气,愿你们在新的一年里,追逐梦想,勇往直前,不...
今天在爬虫实战中,除了正常爬取网页数据外,我们还添加了一个下载功能,主要任务是爬取小说并将其下载...
完美收官,本文是爬虫实战的最后一章了,所以尽管本文着重呈现爬虫实战,但其中有一大部分内容专注于数...
JSON是一种流行的数据传输格式,Python中有多种处理JSON的方式。官方的json库是最常用的,它提供了简单...
独立样本T检验适用于比较两组独立样本的均值差异,而配对T检验则适用于比较同一组样本在不同条件下的均...