Python中是否有内置函数可获取类方法文档字符串的参数名与类型?
提取Docstring中的参数名称与类型
首先明确:Python没有单一的内置函数可以直接提取Docstring里的参数名称和类型,但标准库中的inspect模块加上简单的字符串解析,就能轻松实现你的需求。
你的Docstring采用的是numpy风格的格式,我们可以针对这种格式来解析:
步骤1:导入标准库模块
import inspect
步骤2:获取目标方法的Docstring
你可以用inspect.getdoc()来获取格式化后的Docstring(比直接调用__doc__更干净):
class DB: def execute_and_return(self, sql): """Execute the query and returns the result as a list of list Parameters ---------- sql: str Your query Returns ------- list""" # 实例化类(或者直接用类方法) db = DB() docstring = inspect.getdoc(db.execute_and_return)
步骤3:解析Docstring中的参数信息
写一个简单的解析函数来提取参数名和类型:
def parse_numpy_params(docstring): param_details = {} lines = docstring.split('\n') # 定位到Parameters部分 param_start = None for idx, line in enumerate(lines): if line.strip() == "Parameters": param_start = idx + 2 # 跳过分隔线"----------" break if not param_start: return param_details # 遍历参数行 for line in lines[param_start:]: line = line.strip() if not line or line.startswith("Returns"): break # 遇到Returns部分就停止 if ":" in line: name, type_str = line.split(":", 1) param_details[name.strip()] = type_str.strip() return param_details # 调用解析函数 params = parse_numpy_params(docstring) print(params) # 输出: {'sql': 'str'}
额外技巧:结合inspect获取参数签名
如果你只是想先拿到参数名称,也可以用inspect.signature()直接获取函数的参数列表,再对应Docstring里的类型:
sig = inspect.signature(db.execute_and_return) param_names = [param for param in sig.parameters if param != 'self'] print(param_names) # 输出: ['sql']
需要注意的是,这个解析函数是针对numpy风格的Docstring编写的,如果你的Docstring是Google或reStructuredText风格,解析逻辑需要调整,但核心思路都是定位参数块后提取关键信息。
内容的提问来源于stack exchange,提问作者axel_ande
相关产品推荐
相关产品推荐

