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):
解决了问题
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):