Python 自省(Introspection)是一种强大的特性,它允许程序在运行时检查对象的类型、属性以及它们如何相互关联。这种能力让 Python 非常适合于快速开发、调试以及编写需要高度动态交互的代码。Python 的自省机制主要通过内置的函数和类型来实现,以下是一些关键的机制和函数:
1. type()
函数
type()
函数是最基本的自省函数之一,它用于获取对象的类型。例如:
x = 5
print(type(x)) # 输出: <class 'int'> y = "hello"
print(type(y)) # 输出: <class 'str'>
2. dir()
函数
dir()
函数用于获取一个对象的所有属性和方法的列表。这对于了解对象提供了哪些功能特别有用。
print(dir(list)) # 列出 list 类型的所有属性和方法 my_list = [1, 2, 3]
print(dir(my_list)) # 列出 my_list 实例的所有属性和方法,包括继承自 list 的
3. getattr()
, setattr()
, 和 hasattr()
函数
这三个函数用于在运行时动态地获取、设置和检查对象的属性。
getattr(object, name[, default])
:获取对象名为name
的属性,如果属性不存在,则返回default
(如果提供了的话)。setattr(object, name, value)
:设置对象名为name
的属性值为value
。hasattr(object, name)
:检查对象是否有名为name
的属性,并返回布尔值。class MyClass: def __init__(self): self.x = 10 obj = MyClass() print(getattr(obj, 'x')) # 输出: 10 setattr(obj, 'y', 20) print(obj.y) # 输出: 20 print(hasattr(obj, 'z')) # 输出: False
4.
__dict__
属性大多数 Python 对象都有一个
__dict__
属性,它是一个字典,存储了对象的属性。通过访问这个属性,可以直接查看或修改对象的属性。class MyClass: def __init__(self): self.a = 1 obj = MyClass() print(obj.__dict__) # 输出: {'a': 1} obj.__dict__['b'] = 2 print(obj.b) # 输出: 2
5.
help()
函数虽然
help()
函数不是直接用于自省对象本身的,但它对于理解 Python 中对象(包括模块、函数、类等)的功能和用法非常有用。help()
提供了一个交互式界面,或者可以将信息打印到标准输出中。help(list) # 显示关于 list 类的帮助信息
Python 的这些自省机制和函数极大地增强了其灵活性和动态性,使得开发者能够编写出更加灵活和强大的代码。