首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在像python这样的OOP语言上,从接口到类型和抽象类的实际区别是什么?

在像python这样的OOP语言上,从接口到类型和抽象类的实际区别是什么?
EN

Stack Overflow用户
提问于 2022-01-16 17:21:01
回答 2查看 44关注 0票数 -2

在像python这样的OOP语言上,从接口到类型和抽象类的实际区别是什么?

与维基百科的链接类似于接口类型抽象类

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-17 09:53:08

Python有鸭型

如果它走路像鸭子,叫起来像鸭子,那么它一定是鸭子。

这意味着这样做是可行的:

代码语言:javascript
复制
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中进行更多类型检查:

  • 可以使用标准库abc声明抽象基类。
  • 您可以向代码中添加类型注释,并使用外部类型检查器(例如MyPy)。

TL;DR:Python是鸭类型的,但是如果您想要接口契约附带的保证,就有一些工具。

票数 1
EN

Stack Overflow用户

发布于 2022-01-17 11:34:19

阅读“设计模式GoF”一书时,他们解释说,接口是带有可公开方法的shell,类型是数据的内部结构,抽象类可能是脚本构建一个类似于类型的对象时数据将基于的形式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70732404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档