親クラスからサブクラスを開始します整数 - 上記の例では5または2 - メソッドがupdate(self, t)
であるため、それらをOスーパークラスの下にグループ化することは理にかなっています。これを実現するために、よりオブジェクト指向の方法がある場合、私は、しかし、思ったんだけど、実行時には、私は、次の形式のOオブジェクトを生成する入力のリストがあると
Os = []
for inp in inps:
if inp[0] == 'A':
Os.append(A(inp[1]))
elif inp[0] == 'B':
Os.append(B(inp[1]))
、その後
for O in Os: O.update(t)
を:私はループでプログラムを完了できました。一つの方法は、私は考え、Oクラスの偽の「Oコンストラクタ」外を作るために次のようになります。
def initO(inp):
if inp[0] == 'A':
return A(inp[1])
elif inp[0] == 'B':
return B(inp[1])
Os = [initO(inp) for inp in inps]
これは私の意見では、よりエレガントで、かつすべての集中的な目的のために私が望む結果を与えます。しかし、Pythonでクラスシステムを完全に乱用しているように感じます。おそらくOコンストラクタからAとBを開始することで、これを行うより良い方法がありますか?
EDIT:AとB
ダウン投票には、投票の裏にある理由を説明してください。この解決策は機能しませんか(クラスがローカルで定義されている場合を除いて)、または私は何か間違ったことを述べましたか?私はその質問に答えなかったのですか?十分な警告なしに私がここで採用している悪い習慣はありますか? – lungj
あなたの答えをありがとう。 globals()の使用は、@Willemが参照した "名前で呼び出す"機能ですか? – biffletsbq
Pythonで名前を呼び出すにはいくつかの方法があります(例:https://stackoverflow.com/questions/3061/calling-a-function-of-a-module-from-a-string-with-the-functions -name-in-pythonにはいくつかのwyasが示されています)、どちらが参照されているのかわかりません。あなたの状況によっては、名前を呼ぶことに間違いはありません。私は、上記のものに似ている、タスクを達成する別の方法で私の答えを更新するつもりです。 – lungj