python反射机制
Python 的反射机制是指在运行时获取、检查和修改对象的属性和方法。通过使用反射,我们可以动态地访问和操作对象的属性、调用方法,甚至创建新的属性和方法。
Python 提供了一些内置函数和特殊属性来实现反射机制:
getattr(object, name[, default]):获取对象的属性值,如前面提到的。setattr(object, name, value):设置对象的属性值,如前面提到的。hasattr(object, name):检查对象是否具有指定的属性。delattr(object, name):删除对象的属性。dir([object]):返回对象的所有属性和方法的列表。如果没有提供对象,则返回当前作用域中的属性和方法。type(object)、isinstance(object, classinfo)和issubclass(class, classinfo):用于检查对象的类型和类之间的关系。- 特殊属性
__dict__:是一个字典,包含对象的所有属性和对应的值。 - 特殊属性
__getattr__和__setattr__:在属性不存在或被访问/设置时调用的特殊方法,可自定义处理逻辑。
下面是一个简单的示例,展示了反射机制的基本用法:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print("Hello, I'm", self.name)
person = Person("John", 25)
# 使用 getattr 获取对象的属性值
name = getattr(person, "name")
print(name) # 输出: John
# 使用 hasattr 检查对象是否具有指定的属性
has_age = hasattr(person, "age")
print(has_age) # 输出: True
# 使用 setattr 设置对象的属性值
setattr(person, "age", 30)
print(person.age) # 输出: 30
# 使用 dir 获取对象的所有属性和方法
attributes = dir(person)
print(attributes) # 输出: ['__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__', 'age', 'name',
# 'say_hello']
# 使用 delattr 删除对象的属性
delattr(person, "age")
has_age = hasattr(person, "age")
print(has_age) # 输出: False