2013-03-07 34 views
1

我有一个类(content.MyClass),它存储了大量有关细菌的事实。我多次称它为定义许多类型的细菌。它不是非常优雅,但它相当快速,可读,模块化(易于添加更多细菌)。Python风格:格式化多个冗长的类声明

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

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的(”排队,但因为一些名单很长,不会在这里工作同时,也有很多每班更多的变数;我修剪他们为这里的例子)

回答

2

问:有没有更好的办法,我应该这样做

你在想solving the wrong problem.

让您的课程data-driven:将代码与数据分开。从数据源加载定义;像JSON或YAML文件一样简单的工作就可以很好地工作。

在做数据驱动编程,一个清楚地从它的作用的数据结构区分码,并设计既使得一个可以通过编辑并不是代码,但进行更改程序的逻辑数据结构。

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

+0

我个人认为,使用Python作为配置的文字语法是愉快的和有益的。所以我写了一个库来帮助你在C++程序中使用这种技术! https://github.com/jzwinck/pccl我都是用数据驱动的东西,但是我不清楚这还不是它。 – 2013-03-07 04:41:33

+1

有趣的(我不是那个讽刺或任何东西)。主要来自JavaScript/web/JSON API背景,当然我通过这个镜头看到了一些东西 - 所以我很好奇,在乎要泄露一个这样的配置文件的小例子吗?在我的脑海中,我想它看起来很像JSON,尽管可能用更少的双引号':)' – 2013-03-07 04:45:54

+1

这里有一个基本的,在pccl的单元测试中:https://github.com/jzwinck/pccl/blob/ master/test/PyConfig.test.py - 我喜欢关于“代码作为配置语法”的事情之一是,如果你有一天醒来(像我一样),并意识到你的程序完全知道如何配置的唯一方法本身是通过咨询Web服务或网络协议或其他方式,它可以。哦,正如你从例子中看到的那样,你可以把函数放在配置中! – 2013-03-07 04:47:54

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. 
    } 
+0

我喜欢它,它更干净! – ancientcampus 2013-03-07 05:08:52