かなり複雑なオブジェクトを表すクラスがあります。オブジェクトは、インクリメンタルビルド、さまざまな形式のテキスト文字列の解析、バイナリファイルの分析など、さまざまな方法で作成できます。これまでの私の戦略は次のとおりです。
コンストラクター(
__init__
私の場合は)にすべての内部変数を初期化してもらいますNone
オブジェクトにデータを入力するためのさまざまなメンバー関数を提供します
これらの関数に、変更された新しいオブジェクトを呼び出し元に返してもらいます。
sd = SuperDuper().fromString(s)
例えば:
class SuperDuper:
def __init__(self):
self.var1 = None
self.var2 = None
self.varN = None
## Generators
def fromStringFormat1(self, s):
#parse the string
return self
def fromStringFormat2(self, s):
#parse the string
return self
def fromAnotherLogic(self, *params):
#parse params
return self
## Modifiers (for incremental work)
def addThis(self, p):
pass
def addThat(self, p):
pass
def removeTheOtherOne(self, p):
pass
問題は、クラスが非常に大きくなることです。残念ながら、私はOOPパターンの設計に精通していませんが、この問題にはもっとエレガントな解決策があると思います。ジェネレーター関数をクラスから除外していますか(それは良い考えにfromString(self, s)
なりますか?superDuperFromString(s)