Python的反射机制可以动态获取对象信息以及动态调用对象,Python反射介绍 介绍了Python常用的反射函数使用方法,本文介绍如何获取对象中的函数注释信息以及参数信息。
定义一个Person类:
1 | class Person(): |
dir()
命令也可以获取函数的属性信息:1
2
3
4
5person = Person()
print(dir(person))
func = getattr(person, "talk")
print(dir(func))
Out:1
2
3
4['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'talk']
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__func__', '__ge__', '__get__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
获取函数注释信息
可以通过 __doc__
属性来获取注释信息(三引号括起来的注释):
1 | func = getattr(person, "talk") |
Out:
1 | talk function |
获取函数参数
1、 通过 __code__
属性读取函数参数信息
1 | >> print(dir(func.__code__)) |
1 | print("co_name: ", func.__code__.co_name) # 返回函数名 |
Out:
1 | co_name: talk |
通过 __code__.co_varnames
可以获取参数名,参数默认值可以通过如下方式获得:
1 | print(func.__defaults__) |
Out:
1 | (None,) |
2、通过inspect库来读取函数参数信息
除了用__code__
属性外还可以使用inspect库来读取函数参数,使用getfullargspec和signature方法来读取函数参数:
1 | import inspect |
Out:
1 | ['self', 'name', 'age', 'height'] |
也可以在函数内部使用:
1 | class Person(): |
Out:
1 | Traceback(filename='D:/ProgramWorkspace/PythonNotes/00-Python-Essentials/demo.py', lineno=44, function='talk', code_context=[' print(inspect.getframeinfo(frame))\n'], index=0) |
本文标题:获取Python函数信息的方法
文章作者:hiyo
文章链接:https://hiyongz.github.io/posts/python-notes-for-getting-function-attribution/
许可协议:本博客文章除特别声明外,均采用CC BY-NC-ND 4.0 许可协议。转载请保留原文链接及作者。