Python样式:格式化多个冗长的类声明

时间:2013-03-07 04:36:09

标签: python

我有一个类(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(”)对齐,但由于某些列表非常长,因此在这里不起作用。此外,每个列表中都有很多变量class;我在这里修剪它们的例子。)

2 个答案:

答案 0 :(得分:2)

  

问题:我有更好的方法吗?

您正在考虑solving the wrong problem.

让您的班级data-driven:将代码与数据分开。从数据源加载定义;像JSON或YAML文件这样简单的东西可以正常工作。

  

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

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

答案 1 :(得分: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.
  }