Python: нет атрибута __hash__

#python #class #hash #set #getattr

#python #класс #хэш #установить #getattr

Вопрос:

Экземпляры PackOfPersons имеют __getattr__() функцию, которая, например: PackOfPersons.say_name() будет вызывать Person.say_name() для Person экземпляров внутри PackOfPersons.person_objects() .

 class Person:
    def __init__(self, name):
        self.name = name

    def say_name(self):
        print 'my name is', self.name

    def add_to_set(self):
        PersonObjectSet.add(self)

class PackOfPersons:
    def __init__(self, person_objects):
        self.person_objects = person_objects

    def __getattr__(self, item):
        def _group_helper(*args, **kwargs):
            for person in self.person_objects:
                getattr(person, item)(*args, **kwargs)

        return _group_helper


PersonObjectSet = set([])
PackObjectSet = set([])

a = Person("Albert")
b = Person("Bernie")
c = Person("Catherine")
p = PackOfPersons([a, b, c])
p.say_name()
PackObjectSet.add(p)
  

Последняя строка выдает ошибку, которая отслеживается до:

 line 18, in _group_helper
    getattr(person, item)(*args, **kwargs)
AttributeError: Person instance has no attribute '__hash__'
  

Как мне обойти эту проблему?

Ответ №1:

Решена проблема путем объявления class PackOfPersons(object):