<p>您可以利用内置的Python <code>dict</code>和/或<code>list</code>机制,使用非常简单的类来构造数据。下面是存储<code>Patient</code>对象的示例。它们是扩展的dicts-我选择dicts是因为它非常适合您随时可以添加所需字段作为新键的记录。我还使用标准dict来存储<code>Patient</code>对象,使用它们的记录id作为键来存储和检索容器<code>patients</code>dict中的Patient对象</p>
<p>所示的简单类扩展了<code>UserDict</code>(从<code>dict</code>继承的正确方法),并为患者疾病和治疗提供了“has-a列表”概念。你知道吗</p>
<p>下面是一个使用示例,您可以看到通过继承可以获得许多内置的有用行为。你知道吗</p>
<p>您可以将此结构用于数据,或者根据您的喜好和需要对其进行调整(例如:您可能希望通过使用属性来定义对某些属性更简单的访问,即编写<code>.name</code>而不是<code>['name']</code>,
请参见<a href="https://stackoverflow.com/a/43410484/7857466">here</a>以获得简短的解释,或者您可以用其他方式扩展这些类)。你知道吗</p>
<p><code>super().__init(...)</code>只是在添加更多属性的同时保留类的默认初始化,否则它们将无法正常工作,因为它们会覆盖默认值。<code>Treatment</code>不需要它,因为它没有重新定义<code>__init__</code>(现在)</p>
<pre><code>from collections import UserDict
# see also UserList, UserString
class Treatment(UserDict):
pass
class Disease(UserDict):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.treatments = []
class Patient(UserDict):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.diseases = []
patients = dict()
p1 = patients['0001'] = Patient(name='Eric', surname='Idle')
d1 = Disease(name='Eating too much')
t1 = Treatment(title='Radical Therapy', description='Mint pill after lunch.')
d1.treatments.append(t1)
d2 = Disease(name='Cannot Control the Legs Syndrome')
t2 = Treatment(title='Conservative Approach', description='Have a seat.')
d2.treatments.append(t2)
p1.diseases.extend([d1,d2])
for pid in patients:
print()
print('PID:{} {} {}'.format(pid, patients[pid]['name'],\
patients[pid]['surname']))
print(50*'-')
for disease in patients[pid].diseases:
print()
print('Disease: {}'.format(disease['name']))
for treatment in disease.treatments:
print('Treatment: {}'.format(treatment['title']))
print('\t\t{}'.format(treatment['description']))
</code></pre>