0

オブジェクトを反復処理して、すべてのプロパティをリストに割り当てるにはどうすればよいですか?

から

a = []

class A(object):
    def __init__(self):
        self.myinstatt1 = 'one'
        self.myinstatt2 = 'two'

a =['one','two']
4

2 に答える 2

2

一連の属性を格納し、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

于 2012-11-18T22:00:47.920 に答える
1

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
于 2012-11-18T22:02:25.400 に答える