【问题标题】:Name suggestions for a python dataclass I'm working on? [closed]我正在研究的 python 数据类的名称建议? [关闭]
【发布时间】:2021-12-14 20:47:33
【问题描述】:

我需要向 api 发送消息。有两种不同类型的消息:创建或更新。创建消息将在数据库中创建一个条目。更新消息将更新数据库中的条目。

这是我用来将这些实现为类的代码:

from abc import ABCMeta, abstractmethod
from dataclasses import asdict, dataclass

@dataclass
class Message(metaclass=ABCMeta):
    message_type: str

    def to_dict(self) -> dict:
        return asdict(self)

@dataclass
class CreateMessage(Message):
      message_id: str
      message_status: str

@dataclass
class UpdateMessage(Message):
      message_id: str
      new_message_status: str

但是,我的同事说这些类的名称听起来更像是一个函数。你们有什么建议我可以将 UpdateMessage 和 CreateMessage 类命名为不那么混乱吗?他建议使用 UpdateMessageDto 和 CreateMessageDto,但我担心其他人不会知道 Dto 是什么。

【问题讨论】:

    标签: python naming-conventions python-dataclasses


    【解决方案1】:

    我同意 CreateMessage 例如似乎可以作为一个函数执行。如果可能的话,我建议确保名称使用名词,因为类通常是包含数据的对象,这使得它们与通常与动词相关联的函数明显不同,例如@987654322 @。

    我建议在模型类名称上加上 Action 之类的东西。另一种选择是更明确地添加一个名词,如Model。如果您发现包含短语“Message”变得有点多余,我还建议删除该类的Message 部分,例如将其设置为CreateModel,然后您可以将其放入一个名为messages.py 这样from messages import CreateModel 就会清楚地表明CreateModel 是一个消息模型类。

    以下示例说明了我建议的一种可能的命名模式:

    from __future__ import annotations
    
    from abc import ABCMeta
    from dataclasses import asdict, dataclass
    from typing import Any
    
    
    @dataclass
    class Message(ABCMeta):
        message_type: str
    
        def to_dict(self) -> dict[str, Any]:
            return asdict(self)
    
    
    @dataclass
    class CreateModel(Message):
        message_id: str
        message_status: str
    
    
    @dataclass
    class UpdateModel(Message):
        message_id: str
        new_message_status: str
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      相关资源
      最近更新 更多