我是一位经验丰富的开发者-多年来使用Delphi、C#和C++等语言从事了大量的重型工作。我一直非常遵守结构化编程、面向对象编程、松散耦合模块化设计等准则,因为我所用的所有语言都有内置的方式来强制执行这些概念-访问控制、静态类型、接口和抽象类支持等-我依靠这些来组织我的代码。
现在,我已经开始接触Python几个月了。我对其许多美妙的功能印象深刻,但我非常怀念内置约束以使代码模块化和组织化变得更加容易的方式。不幸的是,我见过很多用Python编写的“意大利面代码”,即使来自非常受人尊敬的来源。我不想挑选任何人,但我有几本由主要的Python专家撰写的书籍,其中的例子充满了设计(更好的说法是“反设计”),让我感到恐惧。 我认为,因为Python非常易于使用,所以很容易被滥用。
当我编写Python代码时,我确实试图自律,但我发现需要大量额外的工作来实现,并且经常只能根据自己对设计的记忆设置和遵守约束,而没有任何语言的帮助。由于没有“编译时”检查,这使得情况变得更加困难-通常你要运行代码段才能发现设计缺陷。
因此,我正在寻找非常具体的信息:一些良好结构化的Python设计和设计技巧的示例,或更好的是一本书-如何最好地实现封装、间接性、非常松散耦合的设计等。
著名Python书籍作者的糟糕设计示例(带有混淆)
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)
zope.interface
或标准库中的abc
模块。 - Cat Plus Plus