2009-12-23 4 views
1

Essayez d'exécuter le code suivant:__getattr__ revient sans cesse Aucun même lorsque je tente de retourner les valeurs

class Test(object): 
def func_accepting_args(self,prop,*args): 
    msg = "%s getter/setter got called with args %s" % (prop,args) 
    print msg #this is prented 
    return msg #Why is None returned? 

def __getattr__(self,name): 
    if name.startswith("get_") or name.startswith("set_"): 
     prop = name[4:] 
     def return_method(*args): 
      self.func_accepting_args(prop,*args) 
     return return_method 
    else: 
     raise AttributeError, name 

x = Test() 
x.get_prop(50) #will return None, why?!, I was hoping it would return msg from func_accepting_args 

Toute personne avec une explication quant à la raison pour laquelle None est retourné?

Répondre

6

return_method() ne renvoie rien. Elle doit retourner le résultat de l'enveloppé func_accepting_args():

def return_method(*args): 
    return self.func_accepting_args(prop,*args) 
+0

omg! 10 heures perdues à partir de jour de travail .. a pris moins d'une minute pour résoudre sur stackoverflow: D –

1

Parce que (return_method) ne retourne pas de valeur. Il tombe juste en bas, d'où vous obtenez None.