发布于 2022-01-17 09:53:08
Python有鸭型:
如果它走路像鸭子,叫起来像鸭子,那么它一定是鸭子。
这意味着这样做是可行的:
class Duck:
def quack(self):
print("quack!")
class Car:
def quack(self):
print("vroum!") # for example purposes
def make_it_quack(something):
something.quack() # don't care what it is, just that it quacks
make_it_quack(Duck()) # quack!
make_it_quack(Car()) # vroum!Python在运行时将尝试调用对象上的quack方法,如果它不存在,则失败。但是,只要方法存在(并且签名合适),Python就不关心对象的实际类型。
在其他语言中,您需要定义两个子类都必须继承的基类(可能是抽象)。如果您希望对象拥有多个不同的方法集,那么要么您可以进行多重继承,2)您可以构建(抽象的)基类的高层次结构,要么您可以创建大量的接口。不需要,但它也没有为您提供代码类型检查的静态保证。
如果需要,有一些方法可以在Python中进行更多类型检查:
TL;DR:Python是鸭类型的,但是如果您想要接口契约附带的保证,就有一些工具。
发布于 2022-01-17 11:34:19
阅读“设计模式GoF”一书时,他们解释说,接口是带有可公开方法的shell,类型是数据的内部结构,抽象类可能是脚本构建一个类似于类型的对象时数据将基于的形式。
https://stackoverflow.com/questions/70732404
复制相似问题