__getattr__ продолжает возвращать None, даже когда я пытаюсь вернуть значения - PullRequest
1 голос
/ 24 декабря 2009

Попробуйте запустить следующий код:

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 

Кто-нибудь с объяснением, почему None возвращается?

Ответы [ 2 ]

6 голосов
/ 24 декабря 2009

return_method() ничего не возвращает. Должен вернуть результат обернутый func_accepting_args():

def return_method(*args):
    return self.func_accepting_args(prop,*args)
1 голос
/ 24 декабря 2009

Потому что return_method () не возвращает значение. Он просто падает внизу, поэтому вы получаете None.

...