2016-10-23 51 views
0

實例有一個__getattr__()功能,例如:PackOfPersons.say_name()將調用內部PackOfPersons.person_objects()Person.say_name()Person實例。的Python:沒有attribue __hash__的<code>PackOfPersons</code>

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

如何解決這個問題?

回答

0

通過聲明class PackOfPersons(object):

解決了問題