Search code examples
pythonpython-3.7python-dataclasses

How can I get Python 3.7 new dataclass field types?


Python 3.7 introduces new feature called data classes.

from dataclasses import dataclass

@dataclass
class MyClass:
    id: int = 0
    name: str = ''

When using type hints (annotation) in function parameters, you can easily get annotated types using inspect module. How can I get dataclass field types?


Solution

  • from dataclasses import dataclass
    
    @dataclass
    class MyClass:
        id: int = 0
        name: str = '' 
    
    myclass = MyClass()
    
    myclass.__annotations__
    >> {'id': int, 'name': str}
    myclass.__dataclass_fields__
    >> {'id': Field(name='id',type=<class 'int'>,default=0,default_factory=<dataclasses._MISSING_TYPE object at 0x0000000004EED668>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD),
     'name': Field(name='name',type=<class 'str'>,default='',default_factory=<dataclasses._MISSING_TYPE object at 0x0000000004EED668>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD)}
    

    on a side note there is also:

    myclass.__dataclass_params__
    >>_DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False)