クラスのインスタンスの属性をグループ化して、グループに属するすべての属性を繰り返し処理できるようにしたい。明らかな答えは、これらをすべてリストや辞書に入れることですが、私はオブジェクトの属性としてアクセスすることができず、私はそれを好むでしょう。エレガントなグループ化属性
一部のコードでは、わたしが望むものを明確にする必要があります。ここには実際にリストと実際の属性があります。 rotate()
を呼び出すとき
class Vectors(object):
def __init__(self, v1, v2, v3):
self.v1 = v1
self.v2 = v2
self.v3 = v3
self.rotatable = ['v2', 'v3']
def rotate(self, angle):
for v in self.rotable:
new_vector = do_rotate(getattr(self, v), angle)
setattr(self, v, new_vector)
class MoreVectors(Vectors):
def __init__(self, v4, *args, **kwargs):
super(MoreVectors, self).__init__(*args, **kwargs)
self.v4 = v4
self.rotable.append('v4')
今では回転するベクトル何を知っていると私は動的にそのリストに複数のベクトルを追加することができます。しかし、これは仕事ではありますが、自分でリストを管理しなければならないので、それは私にはエレガントではありません。
これを書く簡単な方法はありますか?私はすべての属性を辞書に格納することを考えました。ここで各グループはキーであり、次にproperties()
を使用して辞書のすべての項目に属性としてアクセスできます。それは私のために十分にきれいになりますが、メソッド内でプロパティを動的に設定する方法はわかりません。
class Vector(object):
def __init__(self,v,rotatable=False):
self.value = v
self.rotatable = rotatable
そして簡単に値にアクセスするproperties
を使用します:rotatable
Vector
クラスの属性にする方法について
、あなたは 'v1'という名前の属性を持っている場合は、 'v2'、...、' vn'、おそらくあなたのデザインに何か問題があります。 'obj.vectors [0]'などとしてアクセスする際に何が問題になりますか? – geoffspear
この例では、解はdef rotate_vectors(angle、* vectors)です:return [do_rotate(vector、vector in vector)] '。クラスの使用は愚かです。 –
よろしいですか。このクラスは、私の実際のコードを単純化したものです。私の実際のコードでは、すべてのベクトルの説明的な名前があり、クラスはこれより複雑です。私は関連性のある部分を抽出しました。 –