Python:没有attribue __hash__

时间:2016-10-23 02:21:08

标签: python class hash set getattr

PackOfPersons的实例具有__getattr__()功能,例如:PackOfPersons.say_name()会为Person.say_name()内的Person个实例调用PackOfPersons.person_objects()。< / p>

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 个答案:

答案 0 :(得分:0)

通过声明class PackOfPersons(object):

解决了这个问题