如何使用 mypy 构造子类以进行键入
How to structure subclasses with mypy for typing
假设我已经有一个 class 正确键入的文件:
#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
将 仅 被主要 class.
将方法移入 class Mixin
后,您 不会 知道 operation
会 return 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
假设我已经有一个 class 正确键入的文件:
#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
将 仅 被主要 class.
将方法移入 class Mixin
后,您 不会 知道 operation
会 return 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