2016-06-15 5 views
1

속성 만 포함하는 클래스가 있으며 패킹/언 패킹이 작동하도록하고 싶습니다. 이 동작을 얻으려면 어떤 collections.abc을 구현해야합니까?객체에 패킹/언 패킹 구현

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]