Reputation: 469
I just started to use dataclasses. I have created a python dataclass:
from dataclasses import dataclass, fields
from typing import Optional
@dataclass
class CSVData:
SUPPLIER_AID: str = ""
EAN: Optional[str] = None
DESCRIPTION_SHORT: str = ""
DESCRIPTION_LONG: str = "Article long description"
After creating an instance of a this dataclass and printing it out:
data = CSVData(SUPPLIER_AID='1234-568',
EAN='EAN number',
DESCRIPTION_SHORT='Article Name')
print(data)
output is:
CSVData(SUPPLIER_AID='1234-568', EAN='EAN number', DESCRIPTION_SHORT='Article name', DESCRIPTION_LONG='Article long description')
When i call the fields function:
for field in fields(data):
print(field.default)
output is:
"", None, "", Article long description
I would expect to print:
1234-568, EAN number, Article Name, Article long description
Upvotes: 0
Views: 1003
Reputation: 1584
This is how the dataclass.fields method works (see documentation). If you want to iterate over the values, you can use asdict or astuple instead:
from dataclasses import dataclass, asdict
from typing import Optional
@dataclass
class CSVData:
SUPPLIER_AID: str = ""
EAN: Optional[str] = None
DESCRIPTION_SHORT: str = ""
DESCRIPTION_LONG: str = "Article long description"
data = CSVData(SUPPLIER_AID='1234-568',
EAN='EAN number',
DESCRIPTION_SHORT='Article Name')
for field in asdict(data).values():
print(field)
Which prints:
1234-568
EAN number
Article Name
Article long description
Upvotes: 3