接口隔离
Coddy Clean Code:用 Python 写出更好的代码 课程的第 25 课,共 28 课。
“许多面向特定客户端的接口,比一个通用接口更好。”
接口描述了对象可以执行的行为。
接口隔离原则指出,接口在内聚性方面应该尽可能小。换句话说,它应该只做一件事。
我们来看一个反例,然后修正它:
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def walk(self):
pass
@abstractmethod
def swim(self):
pass这个接口承担了多项职责!
实现这个接口时会遇到问题:
class Frog(Animal):
def walk(self):
print("Walking")
def swim(self):
print("Swimming")
class Giraffe(Animal):
def walk(self):
print("Walking")
def swim(self):
raise Exception("Girrafe cannot swim!")如你所见,这个接口不适用于不能同时行走和游泳的动物!
挑战
简单让我们通过实现 Walkable 和 Swimable 类来修复上面的示例。已提供 Frog 和 Giraffe 类,它们实现了这些新类。
任务:
- 创建抽象类
Walkable,其中只有一个抽象函数walk(self) - 创建抽象类
Swimable,其中只有一个抽象函数swim(self)
不要更改给定的代码!
请注意,现在每个接口都只有一项职责,并遵循该原则
亲手试试
from abc import ABC, abstractmethod
# Enter you code here
class Frog(Walkable, Swimable):
def walk(self):
print("Walking")
def swim(self):
print("Swimming")
class Giraffe(Walkable):
def walk(self):
print("Walking")
if __name__ == "__main__":
animal_type = input()
if animal_type == "frog":
animal = Frog()
animal.walk()
animal.swim()
elif animal_type == "giraffe":
animal = Giraffe()
animal.walk()
print("not Swimming")
Clean Code:用 Python 写出更好的代码中的所有课
自己练习: Python 在线编译器