我试图在 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'>
有人可以向我解释我在这里做错了什么吗?
答案 0 :(得分:0)
它可以与 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))