首页 > 解决方案 > 如何使用 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只能由主类继承使用。

标签: pythonsubclasstype-hintingmypy

解决方案


将方法移入类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

推荐阅读