如何使用mypy构造子类以进行类型化

2024-04-24 04:00:58 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我已经有一个类类型正确的文件:

#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被主类继承


1条回答
网友
1楼 · 发布于 2024-04-24 04:00:58

一旦将方法移动到类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

相关问题 更多 >