2016-06-15 4 views
1

属性のみを含むクラスがあり、パッキング/アンパックが機能するようにしたいと思います。この動作を実現するにはどのようなものを実装すればよいですか?オブジェクトにパッキング/アンパックを実装する

class Item(object): 

    def __init__(self, name, age, gender) 
     self.name = name 
     self.age = age 
     self.gender = gender 

a, b, c = Item("Henry", 90, "male") 

私はnamedtupleを使用しないでください。

+2

あなたはどの[ 'Iterable'](HTTPSを解凍することができます: //docs.python.org/2/library/collections.html#collections.Iterable)ので、 '__iter__'を実装する必要があります。 – jonrsharpe

+0

次はどうですか? – Har

+3

これは、 '__iter__'を' return self 'にするかどうかによって決まります。例えば、 'iter((self.name、self.age、self.gender))'を返すことができます。 * iterable *である必要がありますが、必ずしもそうではありません。 – jonrsharpe

答えて

5

Iterableを開梱できます。これは、__iter__メソッドを実装し、イテレータを返す必要があることを意味します。

def __iter__(self): 
    return iter((self.name, self.age, self.gender)) 

はまた、あなたのクラスそしてIterator__iter__だろうreturn self作ることができ、あなたは__next__を実装する必要があるだろう;:あなたのケースでは、これは単に可能性がありこれはより多くの作業であり、おそらくその努力に値するものではありません。詳細については

あなたも__getitem__で反復可能に実装することができ、私は上記のリンク質問パーWhat exactly are Python's iterator, iterable, and iteration protocols?


を参照してください。

def __getitem__(self, index): 
    return (self.name, self.age, self.gender)[index] 
関連する問題