我的目标是设计一个Python API,允许客户端执行以下操作:Python API来设计
md = MentalDisorders()
print(md.disorders['eating'])
得到饮食相关疾病的名单。
这里是我的攻击,认为FAKE_DATABASE将是一个真正的数据库,我只是将这个问题集中在接口的“感觉”/“可用性”上,特别是在Python环境中,我是外星人:
#!/usr/bin/env python2.7
FAKE_DATABASE = {
'anxiety': ['phobia', 'panic'],
'personality': ['borderline', 'histrionic'],
'eating': ['bulimia', 'anorexia'],
}
class MentalDisorders(object):
# ... some methods and fields that make it worthwhile having a container class ...
class DisorderCollection(object):
def __getitem__(self, key):
if key in FAKE_DATABASE:
return FAKE_DATABASE[key]
else:
raise KeyError('Key not found: {}.'.format(key))
def __init__(self):
self.disorders = self.DisorderCollection()
def main():
md = MentalDisorders()
print(md.disorders['anxiety'])
print(md.disorders['personality'])
print(md.disorders['eating'])
try:
print(md.disorders['conduct'])
except KeyError as exception:
print(exception)
if __name__ == '__main__':
main()
- 是具有
DisorderCollection
建议呢? DisorderCollection
应该在MentalDisorders
之内还是在其外面定义?- 正在实例化
self.disorders
通过self.DisorderCollection
正确吗? - 实例化
DisorderCollection
作为字段发生在 内__init__
方法MentalDisorders
? - 或许应该这样的
DisorderCollection
没有字段实例都存在,上述 被实现为一个简单的“转移呼叫”从__getattribute__
到数据库中的一个关键 查找?在这种情况下,简单的md.disorders
(没有指定键) 会返回什么?
这似乎是做一个真正的Java方法。 – 2013-02-24 15:35:08
因为我在Python中毫无用处,所以我来自Java,而且我很乐意学习如何不像Java那样可怜!请教我? – Robottinosino 2013-02-24 15:37:35
什么是MentalDisorders,如果不是'DisorderCollection'。似乎你想要一个“是”的关系,而不是“拥有”。考虑:'m_disorders = MentalDisorders()','m_disorders.disorders ['...']'。我为什么重复自己? – Eric 2013-02-24 15:39:23