我有一组类,我们称它们为
Foo
和 Bar
,它们都继承自当前范围之外(不是由我定义)定义的基类 Father
。我定义了一个协议类 DummyProtocol
,它有一个函数 do_something
。
class DummyProtocol(Protocol):
def do_something(self):
...
class Foo(Father):
def do_something(self):
pass
class Bar(Father):
def do_something(self):
pass
我有一个功能
create_instance
。
def create_dummy_and_father_instance(cls, *args, **kwargs):
return cls(*args, **kwargs)
我想以某种方式输入提示,cls 被输入提示接受类型为
Father
的类,该类也实现了 DummyProtocol
。
所以我将函数更改为此,以表明 cls 是一个继承自
Father
和 DummyProtocol
的类型
def create_dummy_and_father_instance(
cls: Type[tuple[Father, DummyProtocol]], *args, **kwargs
):
return cls(*args, **kwargs)
但是我在
mypy
中收到此错误:
Cannot instantiate type "Type[Tuple[Father, DummyProtocol]]"
您可以定义第二个Father类,它继承自Father和Protocol(另请参阅mypy:如何验证类型是否具有多个超类):
class DummyProtocol(Protocol):
def do_something(self):
...
class Father:
pass
class Father2(Father, DummyProtocol):
pass
class Foo(Father2):
def do_something(self):
pass
class Bar(Father2):
def do_something(self):
pass
class FooNot(Father):
pass
def create_dummy_and_father_instance(
cls: Type[Father2]
):
return cls()
create_dummy_and_father_instance(Foo)
create_dummy_and_father_instance(Bar)
create_dummy_and_father_instance(FooNot) # mypy error ok