结构亚型:对于Python中缺少的Go接口

2021-03-30 00:03:23

欢迎来到第二版“车站旅行车装满了磁带”。这是一种深入潜入如何使用来自的协议定义在Python中实现结构亚型的深度。在此帖子中,将从附加的代码摘录为图像,因此确保将图像设置为显示。

如果某种类型在构建新功能或端点时,我们如何推广某种类型与不同类型兼容?对我来说,它曾经以建筑课为中心。通过全面地在特征上创建分层视图,在不同类型之间的类类型属性和继承。

这种习惯主要是在面向对象编程的思想周围形成的。从C ++开始,后来围绕C#的专业经验,代表与对象的类型关系以及它们的属性成为第二种性质。一般来说,它一直是软件开发架构的核心。我仍然发现面向对象的结构非常容易理解和可扩展。

但是,我有一个新的最喜欢的方式来表示类型的关系,当我开始使用时注入了爱情。

对于那些不熟悉Go的人和其与面向对象编程的关系,答案是,是和否。这是文档中的摘录;

是和否。虽然Go具有类型和方法,允许面向对象的编程风格,但没有类型的层次结构。 “界面”的概念提供了一种不同的方法,我们相信易于使用,并且在某种程度上更加一般。还有方法可以在其他类型中嵌入类型,以提供类似于但不相同的子类化。此外,Go的方法比C ++或Java更常见:可以为任何类型的数据定义,甚至内置类型,例如普通的类型,“未填充”整数。它们不限于结构(课程)。此外,缺少类型的层次结构使“对象”在Go的情况下比诸如C ++或Java等语言更轻微。

我与去往Docker的关系。包含Go构建的容器,也是Kubernetes等容器编排库。它已经成为云本机空间的许多新增添加的标准语言。

当我第一次开始使用时,我真的很挣扎。多年(字面意思)通过用面向对象的模型代表它来接近每个特征,它不是一个容易的转换来远离继承来表示层次结构。

一旦点击,它就会粘。当我为Docker CLI实现“.zip”文件支持时,它点击了我。 (#1895)我基本上不得不代表一个应该延长基本“读者”库的新结构,并限制每个运行多少字节。此更改还包括一个“有限公司”类型的基本定义的叉子,因为如果它超出大小或达到eof,则基本没有正确出错。

而已。 “读者”是一个函数的接口,该函数将采用字节数组并读取。那么如何确保他们的类型可以传递给需要“读者”的功能?

非常简单和直接。无需在变量,进口,继承周围跳舞。让我们处理类型的关系。

一旦舒适,可以表示与接口的类型关系的方法感觉就像超功率。这是一种接近新功能的瘾方式。

代表两种不同类型之间的关系,不关注类型属性和严格的继承层次结构,但仅关注这些类型(其功能)的功能是“结构亚型”是什么。

我们现在知道这种结构化方式有多强大,可以用于架构新的API。虽然Dropbox中有图书馆,但我现在主要在Python工作。但是,我还没有准备好向“界面”说再见。

mypy是一个静态类型检查器,尤其是常规群体时的唯一。它不会带来大量开销,因为它不是编译时间检查器,而是更多的Linter样式Checker。

通过用类型定义注释代码,它真的很容易实现高效的Python开发经验,使其感觉更加安全。

Mypy有一个称为协议的键入定义。假设某些功能的想法存在于某些类型和写入模块中,根据该类型并不是Python开发人员的新功能,它被称为鸭键。什么协议介绍是检查安全性的类型,以及在使用基于协议的类型的类型时,开发人员的某些手持持有。

这是我上面共享的相同的例子,但用yypy在python中;

现在,需要使用此定义可以使用此定义的类型参数的任何函数,以及任何已定义“读取”函数的对象,无论其类类型定义或继承模式如何。

随着Python继续使用PEP 484,PEP 545等待更多这些类型的提示,我们正在接近Python保持其灵活性和灵活性,并具有适当类型的支持。我对这个未来感到非常兴奋。