python - 如何使用 mypy 构造子类以进行打字
问题描述
假设我已经有一个包含正确键入的类的文件:
#main.py
class Runner(object):
...
def operation(self, arg: str) -> Runner:
self.attrib = 'something ' + arg
return self
...
现在我想分离其中的许多operation
方法,因为我的文件变得太大了,所以我创建了一个新文件subs.py
并将我的代码传输到混合:
#main.py
from subs import Mixin
class Runner(Mixin):
...
#subs.py
class Mixin(object):
...
def operation(self, arg: str) -> Runner:
self.attrib = 'something ' + arg
return self
Runner
类型是未知的,subs.py
如果我导入它,那么我将创建循环导入依赖项,我什至认为它无论如何都不会工作,所以我不确定处理这个问题的正确方法,假设 :class:Mixin
将只能由主类继承使用。
解决方案
将方法移入类Mixin
后,您不知道它operation
会返回Runner
. 考虑:
class Foo(Bar, Mixin):
...
f = Foo()
f.operation() # Returns something that is a Bar and a Mixin, but not a Runner.
正确的类型提示是
def operation(self, arg: str) -> Mixin:
self.attrib = 'something ' + arg
return self
推荐阅读
- coq - 当归纳删除太多信息以使目标可解决时该怎么办?
- c++ - 简单的语义动作会破坏 Spirit X3 中的结果
- swift - 有没有办法将evaluateJavaScript的结果作为Swift中函数的返回值返回?
- jquery - .focus() 不能通过 jquery 处理“p”标签
- c# - 循环列数据插入 SQL Server 数据库
- python - 在TensorFlow中,如何清除CNN模型中一个中间变量的GPU内存?
- apache-spark - pySpark 数据框中的累积积
- angular - 从 Angular 6 上的数据表重新加载数据
- python - 如何使用 Numpy\Python 求解三对角矩阵
- exit - 在 RLWrap 中处理 EOF