1

我有一个类(content.MyClass),它存储了很多关于细菌的事实。我多次调用它,以定义多种类型的细菌。它不是很优雅,但它相当快速、可读且模块化(易于添加更多细菌)。

问题:有没有更好的方法我应该这样做?

import content
def myMethod():
    bacteria = {} #A dictionary I fill with 'Bacteria Name':object

    bacteria['Staph Aureus'] = content.MyClass(
        bug_type = ['gram+'],
        virulence = ['Protein A', 'TSST-1', 'exfoiative toxin', 'enterotoxin'],
        labs = ['catalase+', 'coagulase+']
    )
    bacteria['Staph Epidermidis'] = content.MyClass(
        bug_type = ['gram+'],
        sx = ['infects prosthetic devices']
    )
    #Etc. about 25 more times.
    return bacteria

(脚注:我知道 PEP 8 说我应该缩进所有内容以与“MyClass(”)对齐,但这在这里行不通,因为有些列表很长。此外,每个类中有更多变量;我为此处的示例修剪它们。)

4

2 回答 2

2

问题:有没有更好的方法我应该这样做?

你正在考虑解决错误的问题。

使您的课程数据驱动:将代码与数据分开。从数据源加载定义;像 JSON 或 YAML 文件这样简单的东西就可以了。

在进行数据驱动编程时,人们清楚地区分代码和它所作用的数据结构,并设计两者,以便可以通过编辑而不是代码而是数据结构来更改程序的逻辑。

http://www.faqs.org/docs/artu/ch09s01.html

于 2013-03-07T04:38:40.727 回答
1

我会这样做:

def myMethod():
  from content import MyClass
  return {
    'Staph Aureus': MyClass(
      bug_type = ['gram+'],
      virulence = ['Protein A', 'TSST-1', 'exfoiative toxin', 'enterotoxin'],
      labs = ['catalase+', 'coagulase+']
    ),
    'Staph Epidermidis': MyClass(
      bug_type = ['gram+'],
      sx = ['infects prosthetic devices']
    ),
    #Etc. about 25 more times.
  }
于 2013-03-07T04:40:23.423 回答