オブジェクトを反復処理して、すべてのプロパティをリストに割り当てるにはどうすればよいですか?
から
a = []
class A(object):
def __init__(self):
self.myinstatt1 = 'one'
self.myinstatt2 = 'two'
に
a =['one','two']
オブジェクトを反復処理して、すべてのプロパティをリストに割り当てるにはどうすればよいですか?
から
a = []
class A(object):
def __init__(self):
self.myinstatt1 = 'one'
self.myinstatt2 = 'two'
に
a =['one','two']
一連の属性を格納し、APIがそれを使用できるようにリストを返すだけの場合は、本格的なクラスを作成しないでください。namedtuple
代わりに使用してください。これが例です。
>>> import collections
>>> Point = collections.namedtuple('Point', ['x', 'y'])
>>> p = Point(1, 2)
>>> p
Point(x=1, y=2)
APIがシーケンス(具体的にはではないlist
)を期待している場合は、直接渡すことができますp
。特にリストが必要な場合は、Point
オブジェクトをリストに変換するのは簡単です。
>>> list(p)
[1, 2]
新しく作成されたPoint
クラスをサブクラス化し、メソッドを追加することもできます(ドキュメントに詳細があります)。ニーズを満たさない場合は、抽象基本クラスnamedtuple
をサブクラス化するか、ミックスインとして使用することを検討してください。abc.Sequence
1つのアプローチは、コンテナAPIlist
の一部またはすべてを実装することにより、クラスをのように動作させることです。使用している外部APIの動作によっては、を実装するだけでよい場合があります。さらに必要な場合は、いつでも渡すことができます。これにより、イテレータを使用してリストが作成されます。__iter__
list(a)
__iter__
メソッドを追加するのがいかに簡単であるかの例を次に示します。
class A(object):
def __init__(self):
self.myAttr1 = "one"
self.myAttr2 = "two"
def __iter__(self):
yield self.myAttr1
yield self.myAttr2