Python:不属性__hash__

Python: no attribue __hash__

PackOfPersons 的实例有一个 __getattr__() 函数,例如:PackOfPersons.say_name() 将为 PackOfPersons.person_objects() 中的 Person 个实例调用 Person.say_name() .

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__'

我该如何解决这个问题?

通过声明 class PackOfPersons(object):

解决了问题