我正在与 mypy 作斗争,不明白我想要传递一个派生类,其中代码接受基类或任何派生类的实例,并在该传递的实例上调用方法。
My code:
from typing import Type
import abc
class Base(abc.ABC):
@abc.abstractmethod
def my_method(self):
pass
class Derived(Base):
def my_method(self):
print("Derived")
def my_function(b: Type[Base]):
b.my_method() # line 14
d = Derived()
my_function(d) # line 17
当我运行它时,它会打印“Derived”(如预期)。但 mypy 对此并不满意:
mcve.py:14:错误:“Base”的“my_method”参数太少
mcve.py:17: 错误:“my_function”的参数 1 具有不兼容的类型“Derived”;预期“类型[基础]”
我假设第 14 行错误是因为 mypy 没有看到第一个参数位于方法调用前面(base.
),这可能是因为第17行的错误?
我如何让 mypy 理解这段代码?或者我在这里缺少什么?
Type
如果你想通过则使用Base
或一个子类Base
作为一个论点。您打算通过instance这样的一类。
def my_function(b: Base):
b.my_method()
第 14 行的错误是按字面意思理解你的类型提示,并认为你的意思是做类似的事情Base.my_method(x)
而不是x.my_method()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)