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 に答える