Python反射机制主要通过以下几种方式实现:
- type() – 返回对象类型
可以使用type()函数获取一个对象的类型,它返回一个Type对象:
## python www.itzhimei.com 代码
print(type(5)) # <class 'int'>
print(type([1, 2])) # <class 'list'>
- isinstance() – 判断对象类型
isinstance()可以判断一个对象是否是指定的类型:
## python www.itzhimei.com 代码
print(isinstance(5, int)) # True
print(isinstance([1, 2], list)) # True
- hasattr() – 判断对象属性
可以使用hasattr()判断一个对象是否包含指定的属性或方法:
## python www.itzhimei.com 代码
class Person:
name = 'Bob'
p = Person()
print(hasattr(p, 'name')) # True
print(hasattr(p, 'age')) # False
- getattr()/setattr()/delattr() – 获取/设置/删除对象属性
可以直接读取/修改对象的属性:
## python www.itzhimei.com 代码
print(getattr(p, 'name')) # 'Bob'
setattr(p, 'name', 'Alice')
delattr(p, 'name')
- vars() – 获取对象属性字典
vars()会返回对象属性的字典:
## python www.itzhimei.com 代码
print(vars(p))
# {'name': 'Bob'}
反射是元编程的重要方式之一,可以通过字符串操作对象,使代码更加灵活。