さまざまなタイプの変数のコンテナとなるクラスがあります。コレクションは有限であり、それほど大きくないため、辞書は使用しませんでした。コンストラクターで変数が要求されている (True/False として指定されている) かどうかに基づいて、変数の作成を自動化または短縮する方法はありますか?
たとえば、次のようなものがあります。
class test:
def __init__(self,a=False,b=False,c=False):
if a: self.a = {}
if b: self.b = 34
if c: self.c = "generic string"
コンストラクターで true である a、b、c のいずれかについて、それらはオブジェクトで作成されます。
一部のオブジェクトが持つ標準変数 (a、b、c、d ..) と持たないオブジェクトのコレクションがあります。組み合わせの数が多すぎて個別のクラスを作成できませんが、変数の数が不足しているため、各クラスにそれらの辞書を作成できません。
Pythonで次のようなことを行う方法はありますか:
class test:
def __init__(self,*args):
default_values = {a:{},b:34,c:"generic string"}
for item in args:
if item: self.arg = default_values[arg]
たぶん、これを行うためのまったく別の方法がありますか?
編集:
これを明確にするために、2D サーフェス上のさまざまなタイプのバウンディング ボックスを表すクラスを作成します。ボックスの機能に応じて、フレーム座標、内部クロス座標、ID、人口統計 (そのボックスに添付)、および計算を容易にするその他のキャッシュ値のいずれかを持つことができます。
内部データをエクスポートおよび変更し、同じタイプの他のオブジェクトと対話できるようにするメソッドが関連付けられているため、各オブジェクトをディクショナリとして使用したくありません (文字列が + - .join と対話する方法と同様)。等。)。また、各オブジェクト内に辞書を持ちたくありません。その変数への呼び出しは洗練されていないからです。
print foo.info["a"]
対
print foo.a
ボールドットボールのおかげで、私は解決策を思いつきました:
class test:
def __init__(self, a=False, b=False,c =False):
default_values = {"a":{},"b":34,"c":"generic string"}
for k, v in default_values.iteritems():
if eval(k): setattr(self,k,v)