Python函数内省:作为参数传递的类的哪些成员在其中被提及?

2024-04-28 12:01:06 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有如下函数:

def eggs(a,b,c):
    if c.foo:
        return a + b.bar
    else:
        return c.spam

我希望有一个更高阶的函数能够内省传递的函数,并通过点语法检索代码中提到的参数成员,其行为如下:

>>> member_inspector(eggs, 'c')
('foo','spam')

>>> member_inspector(eggs, 'b')
('bar')

>>> member_inspector(eggs, 'a')
()

这能做到吗?怎样?你知道吗


Tags: 函数代码参数returnifinspectorfoodef
1条回答
网友
1楼 · 发布于 2024-04-28 12:01:06

以下是基本版本:

import inspect
from textwrap import dedent
import ast

def member_inspector(f, var):
    source = dedent(inspect.getsource(f))
    module = ast.parse(source)
    func = module.body[0]
    result = []
    for stmt in func.body:
        for node in ast.walk(stmt):
            if (isinstance(node, ast.Attribute) and
                    isinstance(node.value, ast.Name) and
                    node.value.id == var):
                result.append(node.attr)
    return result

相关问题 更多 >