python反射机制

Python 的反射机制是指在运行时获取、检查和修改对象的属性和方法。通过使用反射,我们可以动态地访问和操作对象的属性、调用方法,甚至创建新的属性和方法。

Python 提供了一些内置函数和特殊属性来实现反射机制:

  1. getattr(object, name[, default]):获取对象的属性值,如前面提到的。
  2. setattr(object, name, value):设置对象的属性值,如前面提到的。
  3. hasattr(object, name):检查对象是否具有指定的属性。
  4. delattr(object, name):删除对象的属性。
  5. dir([object]):返回对象的所有属性和方法的列表。如果没有提供对象,则返回当前作用域中的属性和方法。
  6. type(object)isinstance(object, classinfo) 和 issubclass(class, classinfo):用于检查对象的类型和类之间的关系。
  7. 特殊属性 __dict__:是一个字典,包含对象的所有属性和对应的值。
  8. 特殊属性 __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

  

posted @ 2023-08-14 09:45  7dao  阅读(92)  评论(0编辑  收藏  举报