【发布时间】:2017-11-25 15:53:12
【问题描述】:
我有一个 python 文件,其中定义了一些类和函数:
class A(object):
def __init__(self, an_arg, a_default_arg=None):
pass
def doStuff(an_other_arg, an_other_default_arg=None):
pass
我想得到这个文件中所有类和函数的列表。 (他们的名字和参数定义就够了)
现在,我知道您可以使用 __import__(module_descriptor) 和 inspect 执行此操作,但这不是一个选项,因为我正在扫描的文件来自不受信任的来源。
我的第一反应是尝试创建一个安全的环境来导入它们,但根据其他 stackoverflow 问题,这似乎是不可能的。
【问题讨论】:
-
1.您的意思是“函数”,而不是“可执行文件” 2. 为此使用正则表达式似乎很容易。只需像往常一样打开文件并解析它。
-
不,我特别指的是可执行文件作为由包装器包装的函数通常不再是函数。但为了清楚起见,我会更改它。正则表达式是否不适合解析编程语言,但这种解析可能受到限制?
-
看看这个正则表达式,例如:regex101.com/r/YPbNcz/1 它很可能可以简化,但它似乎是一个很好的起点。确保使用单行模式,以便
.将匹配换行符。 -
我发现使用此类正则表达式存在一些问题:1) 它们通常还会返回在多行 cmets 中定义的函数和类(单行 cmets 很容易修复),2) 他们无法检测到某些函数是在同一个文件中用另一种变量类型重新定义。
标签: python class python-import