在PyCharm中,类型暗示可以正确地支持标准库dataclass。但是,当我在mydataclass中使用相同的实现时,PyCharm不能支持:from dataclasses import dataclass
from typing import Tuple, Dict, TypeVar
_C = TypeVar('_C', bound=type)
class TestORM(type):
def __new__(cls, clsname: str, bases: Tuple, clsdict: Dict):
param = ""
for key, key_type in clsdict.get('__annotations__', {}).items():
param += f", {key}: {key_type.__name__} = {clsdict.get(key)}"
clsdict['__init__'] = make_init(param)
return super().__new__(cls, clsname, bases, clsdict)
@dataclass
class Test:
a: int = 0
def mydataclass(cls: _C) -> _C:
param = ""
for key, key_type in cls.__annotations__.items():
param += f", {key}: {key_type.__name__} = {getattr(cls, key)}"
setattr(cls, "__init__", make_init(param))
return cls
def make_init(param:str):
locals = {}
txt = f'def __init__(self{param}):\n pass'
exec(txt, None, locals)
return locals['__init__']
@mydataclass
class MyTest:
a: int = 0
class MyORMTest(metaclass=TestORM):
a: int = 0
if __name__ == '__main__':
Test(a='a')
MyTest(a='a')
MyORMTest(a='a')
{1美元^
如何使PyCharm类型的暗示起作用?在
总而言之,我只想知道PyCharm如何处理带有dataclass的自定义类,而不使用与自定义类相关的任何存根文件。当我使用与dataclass和exec相同的实现来使我的__init__函数成为动态的,我仍然无法得到正确的类型暗示。在
PyCharm是否对特定库执行特定的解析或检查?在