如何解决打字:如何将类作为参数传递?
我试图在 Python 中将一个类传递给一个函数,然后在函数中实例化它并返回它。 到目前为止,这有效,但是一旦我尝试添加 Python 类型,我就会收到以下错误:
Expected no arguments to "object" constructor Pylance (reportGeneralTypeIssues)
这是发生错误的最小示例。
from dataclasses import dataclass
from typing import Dict,Type,TypeVar
@dataclass
class Bar:
x: int
T = TypeVar('T')
def Foo(clazz: Type[T],kwargs: Dict[str,int]) -> T:
return clazz(**kwargs) # --> Expected no arguments to "object" constructor
bar = Foo(Bar,{'x': 1})
print(type(bar)) # --> <class '__main__.Bar'>
有人可以向我解释我在这里做错了什么吗?
解决方法
它可以与 cast 一起工作,明确地告诉
类型检查器 clazz 是对象的子类型
可以接受命名参数。 (可能有
一个比 Any
更好的投射目标,
但这有效)
from dataclasses import dataclass
from typing import Dict,Type,TypeVar,Any,cast
@dataclass
class Bar:
x: int
T = TypeVar('T')
def Foo(clazz: Type[T],kwargs: Dict[str,int]) -> T:
clazz = cast(Type[Any],clazz)
return clazz(**kwargs) # --> Expected no arguments to "object" constructor
bar = Foo(Bar,{'x': 1})
print(type(bar))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。