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