【问题标题】:Defining Dentalstatus as a class in python在 python 中将 Dentalstatus 定义为一个类
【发布时间】:2022-01-17 22:33:55
【问题描述】:

由于我是编码新手,我有一个基本问题是为患者的牙齿状态定义一个类。我想定义一个代表患者(有 32 颗牙齿)牙齿状态的类。每颗牙齿都可以有不同的状态(例如,“h”=“健康”,“d”=腐烂)。牙齿由其位置定义(18、17、17 ... 11、21、22 ... 等)。牙科状态也有两种选择(现有和治疗计划)。我想知道如何正确定义类。我正在考虑将具有默认牙齿位置和状态的类定义为字典,并为患者创建不同的实例。目前我正在考虑结构:

class Dentalstatus:
    '''defines the dental status of a patient'''

    status = {
        '18': 'h',
        .
        .
        .
        '48': 'h',
    }

是否有必要将字典元素定义为类的属性,或者您更愿意从字典中继承状态的单个属性,例如:

status = {
    '18': 'h',
    .
    .
    .
    '48': 'h',
}

class Dentalstatus:
    def __init__(self, status):
        self.status = status

【问题讨论】:

  • 您不想使用全局字典来获取状态。然后每个病人都会使用同一个字典。
  • 明白。但是有必要自己初始化每个牙齿位置还是可以参考实例字典?
  • 不是每个实例都是全嘴的状态吗?
  • Dentalstatus 是患者的状态。患者有 32 颗牙齿,因此他们需要包含所有 32 个值的自己的字典。
  • 其实我想起来,如果班级是病人可能会更好。每个患者都可以拥有现有的牙科状态和计划治疗的状态。还是我错了?

标签: python class


【解决方案1】:

我在这里的基础知识可能走得太远了。但这将是我想要的。我真的很抱歉没有找到更好的方法来处理病人的牙齿是一本大字典的问题。

from dataclasses import dataclass
from typing import Optional

teeth = {
    18: 'd',
    17: 'c',
    16: 'c',
    15: 'c',
    14: 'h',
    13: 'd',
    12: 'c',
    11: 'h',
}


dental_catalog = {
    'c': 'crown',
    'h': 'healthy',
    'd': 'decayed'
}


@dataclass
class Patient:
    name: Optional[str]
    id: int
    dental_health: dict
    health_plan: str
    exists: bool

    def __post_init__(self):
        new_dental_health = {}
        for key, value in teeth.items():
            new_dental_health[key] = dental_catalog[value]
        self.dental_health = new_dental_health


patient_one = Patient(name='John', id=1, dental_health=teeth, health_plan='A', exists=True)
print(patient_one.dental_health)

打印出来

{18: 'decayed', 17: 'crown', 16: 'crown', 15: 'crown', 14: 'healthy', 13: 'decayed', 12: 'crown', 11: 'healthy'}

【讨论】:

  • 实际上除了健康和腐烂之外还有更多的选择,例如填充,皇冠,失踪......
  • 数字也不是按顺序排列的,它们像 18 17 16 15 14 13 12 11 21 22 23 24 25 26 27 28 38 37 36 35 34 33 32 31 41 42 43 44 45 46 47 48 .为此,我认为列表不合适。是的,插入患者的牙齿状态是一项工作。
  • @tool_77 我这次试图更直接地回答问题,因为您的问题是关于可以做什么的建议。不幸的是,为了让您更轻松地输入患者的牙齿健康数据,这在很大程度上取决于您如何获取这些数据。如果是手动过程,我真的想不出简单的自动化方法。不过,我现在在答案中加入了一些设计理念,也许可以帮助您根据问题的评论历史从其他角度看待问题。
  • 非常感谢。我认为这很有帮助!
猜你喜欢
  • 1970-01-01
  • 2012-01-02
  • 2010-12-02
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多