即使我尝试返回值,__ getattr__也会一直返回None

时间:2009-12-23 21:17:30

标签: python metaprogramming

尝试运行以下代码:

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 

任何人都解释为什么没有返回?

2 个答案:

答案 0 :(得分:6)

return_method()不会返回任何内容。它应该返回包装func_accepting_args()的结果:

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

答案 1 :(得分:1)

因为return_method()没有返回值。它只是落在底部,因此你得到无。