You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python.NET(clr)如何获取.NET方法的函数签名?

在Python中获取.NET方法的签名

由于通过clr导入的.NET方法并非Python原生可调用对象,Python标准库的inspect.signature无法识别这类对象,需要借助.NET自身的反射机制来获取方法签名,以下是两种可行方案:

方案一:使用.NET反射API(推荐)

直接调用.NET的反射接口获取方法的参数信息,这是最可靠的方式:

import clr
clr.AddReference(r"C:\foo.dll")
from foo import *

my_foo = Foo()
# 获取方法的.NET MethodInfo对象
method_info = my_foo.my_method.Method
# 获取所有参数定义
parameters = method_info.GetParameters()

# 构建签名字符串
signature = []
for param in parameters:
    # 获取参数类型的名称和参数名
    type_name = param.ParameterType.Name
    param_name = param.Name
    # 如果是可选参数,标注默认值
    if param.HasDefaultValue:
        signature.append(f"{type_name} {param_name} = {param.DefaultValue}")
    else:
        signature.append(f"{type_name} {param_name}")

# 输出完整签名
print(f"{method_info.Name}({', '.join(signature)})")

方案二:解析方法的__doc__属性

部分.NET方法的__doc__属性会包含签名信息,可以通过解析该字符串提取签名(此方法依赖文档生成情况,可靠性略低):

import clr
clr.AddReference(r"C:\foo.dll")
from foo import *

my_foo = Foo()
# 从__doc__中提取签名部分(通常在文档开头)
doc = my_foo.my_method.__doc__
if doc:
    # 截取到第一个换行符之前的内容,通常就是签名
    signature = doc.split('\n')[0].strip()
    print(signature)

补充说明

  • 如果是静态方法,直接通过类获取方法对象即可:method_info = Foo.static_method.Method
  • 若需要更详细的类型信息(如完整命名空间的类型名),可以将param.ParameterType.Name替换为param.ParameterType.FullName

内容的提问来源于stack exchange,提问作者Basj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 23:45:00