#.inspect模块
文章目录
# coding=utf8
from inspect import getmembers, signature
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def get_name(self):
return self.name
def set_name(self, name):
self.name = name
def get_age(self):
return self.age
def set_age(self, age):
self.age = age
# print(getmembers(Person))
def is_string(x):
if isinstance(x,str):
return True
else:
return False
person = Person('test', 100)
# print(getmembers(person, is_string))
# getmodulename ismodule isclass ismethod
# signature
def foo(a:str, *, b:int, **kwargs) -> str:
return a
sig = signature(foo)
print(sig)
print(sig.parameters['a'])
print(sig.parameters['a'].kind)
print(sig.parameters['a'].annotation)
print(sig.return_annotation) # 返回类型
res = sig.bind(a='1', b=1)
print(res.arguments) # OrderedDict
print(res.args) # 位置参数值构成的元组
print(res.kwargs) # 由关键字参数值构成的元组
print(res.signature)
# Parameter
# name: 参数名,类型:字符串
# kind: 参数类别,类型:枚举值,见下面的介绍
# default:默认值,如果没有默认参数则为Parameter.empty
# annotation:注解,例如:a: int
# 属性方法:
# 1.empty:就是在参数没有默认值时设置为Parameter.empty。
# 2.name:参数名。
# 3.default: 参数的默认值,无默认值时为Parameter.empty。
# 4.annotation: 参数注解。
# 5.kind: 参数的种类,以Parameter枚举值的形式展现:
# POSITIONAL_ONLY 只能作为位置参数
# POSITIONAL_OR_KEYWORD 位置参数或关键字参数
# VAR_POSITIONAL *args,传入后会以元组的形式展现
# KEYWORD_ONLY 只能作为关键字参数
# VAR_KEYWORD **kwargs,传入会以字典的形式展现