給定如下資料類:
class MessageHeader(BaseModel):
message_id: uuid.UUID
def dict(self, **kwargs):
return json.loads(self.json())
當我呼叫時,我想得到一個字串文字字典字典dict的MessageHeader
期望結果如下:
{'message_id': '383b0bfc-743e-4738-8361-27e6a0753b5a'}
我想避免使用像pydantic& 我不想使用的 3rd 方庫,json.loads(self.json())因為有額外的往返行程
有沒有更好的方法將資料類轉換為具有上述字串文字的字典?
uj5u.com熱心網友回復:
您可以使用dataclasses.asdict:
from dataclasses import dataclass, asdict
class MessageHeader(BaseModel):
message_id: uuid.UUID
def dict(self):
return {k: str(v) for k, v in asdict(self).items()}
如果你確定你的類只有字串值,你可以完全跳過字典理解:
class MessageHeader(BaseModel):
message_id: uuid.UUID
dict = asdict
uj5u.com熱心網友回復:
使用dataclasses.fields創建欄位和值的淺表副本。
from dataclasses import dataclass, fields
import uuid
@dataclass
class MessageHeader:
message_id: uuid.UUID
other_string: str
def dict(self):
return {field.name: str(getattr(self, field.name)) for field in fields(self)}
message_header = MessageHeader(uuid.uuid4(), "test_str")
print(message_header.dict())
uj5u.com熱心網友回復:
嘗試使用 vars():
from dataclasses import dataclass
import uuid
@dataclass
class MessageHeader:
message_id: str
some_string: str
some_other_string: str
def dict(self):
return vars(self)
message_header = MessageHeader(str(uuid.uuid4()), "Test", "test 2")
print(message_header.dict())
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490947.html
下一篇:如何修復主頁渲染不起作用?
