Menu
CoddyTech

接口隔离

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!")

如你所见,这个接口不适用于不能同时行走和游泳的动物!

challenge icon

挑战

简单

让我们通过实现 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 在线编译器