Python设计指南:

发布时间:2019-05-19 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了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()函数来读取编写代码时编写的文档字符串.

总结

以上是脚本之家为你收集整理的Python设计指南:全部内容,希望文章能够帮你解决Python设计指南:所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。
标签:encapsulation