Python中查看活动对象的信息:inspect 模块

inspect 是 Python 标准库中的一个模块。于获取活动的对象信息,比如模块的、类、方法、函数、参数、源代码、文档字符串等。这对于编写动态代码、调试、以及创建需要自省(introspection)功能的库和框架非常有用。

例如,你可以使用 inspect 模块来获取一个函数的参数列表、注释、源代码等:

import inspect  
  
def my_function(a, b=2, *args, **kwargs):  
    """这是一个示例函数。"""  
    pass  
  
# 获取函数签名  
signature = inspect.signature(my_function)  
print(signature)  
  
# 获取函数的文档字符串  
doc_string = inspect.getdoc(my_function)  
print(doc_string)  
  
# 获取函数的源代码(如果可用)  
try:  
    source_code = inspect.getsource(my_function)  
    print(source_code)  
except OSError:  
    print("源代码不可用")

你可以结合使用 inspect 和 Python 的内置函数(如 dir() 和 getattr())来探索一个实例化对象的信息。以下是一个例子,展示如何查看一个类实例化后的基本属性和方法:

import inspect  
  
class MyClass:  
    def __init__(self, name, age):  
        self.name = name  
        self.age = age  
  
    def greet(self):  
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")  
  
# 实例化对象  
my_instance = MyClass("Alice", 30)  
  
# 使用 dir() 获取对象的所有属性和方法名  
attributes_and_methods = dir(my_instance)  
print("Attributes and Methods:", attributes_and_methods)  
  
# 筛选并打印出实例变量(非方法)  
instance_variables = [attr for attr in attributes_and_methods if not callable(getattr(my_instance, attr))]  
print("Instance Variables:", instance_variables)  
  
# 打印出某个特定实例变量的值  
print("Name:", getattr(my_instance, 'name'))  
  
# 如果你想查看方法(函数)的签名,可以使用 inspect.signature  
greet_signature = inspect.signature(my_instance.greet)  
print("greet Method Signature:", greet_signature)  
  
# 如果你想查看方法的文档字符串  
greet_docstring = inspect.getdoc(my_instance.greet)  
print("greet Method Docstring:", greet_docstring)  
  
# 注意:对于实例方法,通常直接使用 inspect.getdoc(MyClass.greet) 也是可以的  
# 因为在 Python 中,实例方法和类方法是绑定的,但文档字符串存储在类级别

在这个例子中,我们首先定义了一个简单的类 MyClass,它有一个构造函数 __init__ 用于初始化实例变量 name 和 age,以及一个方法 greet 用于打印问候语。然后,我们实例化这个类,并使用 dir() 函数来获取对象的所有属性和方法名。通过进一步筛选,我们可以区分出哪些是实例变量(非方法),并打印出它们的名称和值。

对于方法,我们使用 inspect.signature() 来查看其签名,使用 inspect.getdoc() 来获取其文档字符串。不过,请注意,对于实例方法,直接通过类名访问并获取文档字符串通常也是可行的,因为 Python 中的实例方法是与类绑定的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值