I'm trying to use dataclass field as a property to allow custom setter/getter logic, but the metadata information seems to be getting lost when I do so.
Consider the below simple example highlighting this issue:
from dataclasses import dataclass, field, fields
@dataclass
class Test:
name:str = field(metadata={'persistence': 'DB'})
_name:str = field(init=False, default='name', repr=False)
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
print(fields(Test))
The output shows empty metadata for the field name
:
(Field(name='name',type=<class 'str'>,default=<property object at 0x7f15d103d590>,default_factory=<dataclasses._MISSING_TYPE object at 0x7f1617c4dbe0>,init=True,repr=True,hash=None,compare=True,
metadata=mappingproxy({}),_field_type=_FIELD),
Field(name='_name',type=<class 'str'>,default='name',default_factory=<dataclasses._MISSING_TYPE object at 0x7f1617c4dbe0>,init=False,repr=False,hash=None,compare=True,
metadata=mappingproxy({}),_field_type=_FIELD))
How can I avoid this issue?