开闭原则
Coddy Clean Code:用 Python 写出更好的代码 课程的第 23 课,共 28 课。
“软件实体应该对扩展开放,对修改关闭。”
这条原则指出,任何函数、模块或类都应该允许扩展其行为,而无需修改代码本身。
假设我们有一个类 TxtConvertor,它可以将 txt 文件转换为 json 或 xml,
class TxtConvertor:
def convert_to_json(self, file):
print("converts file to json")
def convert_to_xml(self, file):
print("converts file to xml")这种结构违反了开闭原则。
为什么?
例如,如果我们想添加将 txt 文件转换为 html 的支持,就必须修改现有的类(违反了对修改关闭的原则)。
那么我们应该怎么做?
在这个例子中,一种解决方案是创建一个抽象类来包含主要函数,
from abc import ABC, abstractmethod
class TxtConvertor(ABC):
@abstractmethod
def convert(self, file):
pass
class TxtConvertorToJson(TxtConvertor):
...
.
.
.
abc库支持 Python 抽象基类,你可以在这里阅读更多内容。
挑战
中等你的任务是修改给定的示例,以应用开闭原则,并添加转换器以支持将 txt 转换为 html。
- 创建抽象类
TxtConvertor - 创建类
TxtConvertorToJson、TxtConvertorToXML、TxtConvertorToHTML,让它们继承自TxtConvertor并实现转换器(如上面的示例所示)
亲手试试
class TxtConvertor:
def convert_to_json(self, file):
print("converts file to json")
def convert_to_xml(self, file):
print("converts file to xml")Clean Code:用 Python 写出更好的代码中的所有课
自己练习: Python 在线编译器