Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 如何让mypy知道现有类型支持某些属性和方法?_Types_Mypy_Abstract Data Type - Fatal编程技术网

Types 如何让mypy知道现有类型支持某些属性和方法?

Types 如何让mypy知道现有类型支持某些属性和方法?,types,mypy,abstract-data-type,Types,Mypy,Abstract Data Type,我在自学Python,并试图通过mypy的类型检查系统,但我在类型、类、抽象类、泛型类型等方面迷失了方向 因此,我想创建一个泛型/抽象类型/类来表示日期,指定此类型/类必须具有年、月和日属性,并且必须支持比较运算符。听起来您希望使用协议描述日期实现必须具有的功能协议完全是另一种类型,一次了解所有这些东西肯定会有很多,但一旦你习惯了它们,它们真的很好 定义一个协议会告诉typechecker“如果你发现有什么东西可以做这些事情,它就是这个协议的实现者,这意味着期待这个协议的实现者应该对它感到满意”

我在自学Python,并试图通过mypy的类型检查系统,但我在类型、类、抽象类、泛型类型等方面迷失了方向


因此,我想创建一个泛型/抽象类型/类来表示日期,指定此类型/类必须具有
属性,并且必须支持比较运算符
。听起来您希望使用协议描述日期实现必须具有的功能协议完全是另一种类型,一次了解所有这些东西肯定会有很多,但一旦你习惯了它们,它们真的很好

定义一个协议会告诉typechecker“如果你发现有什么东西可以做这些事情,它就是这个协议的实现者,这意味着期待这个协议的实现者应该对它感到满意”.它很像一个抽象基类,但也不是-它只是一个接口规范,实际上没有人需要从中继承(从协议继承基本上是不可行的-mypy将确定是否有任何类实现了协议,无论您是否声明该类继承自该协议).你可以阅读政治公众人物关于协议的内容


您可能不需要它,或者已经找到了它,但由于听起来您好像在试图描述和重新实现datetime功能的一个子集,datetime也可能对您有用。

感谢您提供了有用的链接。我从来没有听说过协议,但听说过“静态鸭子类型”在标题中听起来很有趣,因为我的问题是现有类型(
datetime.date
)是否符合我定义的模式。在修复代码之前,我似乎有一些阅读材料要阅读,但您为我指出了一个有希望的方向。
Value of type variable "Date" of "add_months" cannot be "DateP"
Expected type '(int, int, int) -> Any' (matched generic type '(int, int, int) -> Date'), got '(y: int, m: int, d: int) -> DateP' instead