Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么return不返回method中的实际值,而是获取None?_Python_Python 3.x_Python 3.6 - Fatal编程技术网

Python 为什么return不返回method中的实际值,而是获取None?

Python 为什么return不返回method中的实际值,而是获取None?,python,python-3.x,python-3.6,Python,Python 3.x,Python 3.6,假设我们有: A类: 定义初始化(自): self.Ap1='Ap1val' self.Ap2='Ap2val' self.Ap3='Ap3val' B类: 定义初始化(自): self.Bp1='Bp1val' self.Bp2='Bp2val' self.Bp3=A() C类: 定义初始化(自): self.Cp1='Cp1val' self.Cp2='Cp2val' self.Cp3=B() 我希望使用以下代码获取给定对象字段名的值: def gp(class_inst, key):

假设我们有:

A类:
定义初始化(自):
self.Ap1='Ap1val'
self.Ap2='Ap2val'
self.Ap3='Ap3val'
B类:
定义初始化(自):
self.Bp1='Bp1val'
self.Bp2='Bp2val'
self.Bp3=A()
C类:
定义初始化(自):
self.Cp1='Cp1val'
self.Cp2='Cp2val'
self.Cp3=B()
我希望使用以下代码获取给定对象字段名的值:

def gp(class_inst, key):
    properties = [prop for prop in dir(class_inst) if not prop.startswith('__')]

    for prop in properties:
        value = class_inst.__getattribute__(prop)
        if isinstance(value, str):
            print('{}:{} {} {}'.format(prop, value, prop == key, key))
            if prop == key:
                print(value)
                return value
        else:
            gp(value, key)

    return None


print(gp(C(), 'Bp2'))

但作为回报,我不断得到
None
,即使if返回true并输入正确的return语句。

问题是这一行的递归:

else:
    gp(value, key)
prop==键测试正在从不处理返回值的递归函数返回值。要处理该值,需要设置else语句以返回递归结果

else:
    return gp(value, key)
这个解决方案在我的测试中起作用。

它应该是
返回gp(值,键)