反射

发布时间 2024-01-05 19:23:52作者: ssrheart

反射

  • 在 Python 中,反射是指在运行时获取对象的信息,包括对象的属性和方法,以及动态地操作这些属性和方法。在面向对象编程中,反射允许你在运行时检查类和对象的信息,而不是在编写代码时硬编码这些信息。

(1)获取对象属性值和方法/调用getattr()

  • 使用 getattr() 函数可以获取对象的属性值。
class Heart:
    def __init__(self):
        self.age = 18

heart=Heart()
age = getattr(heart, 'age')
print(age)  # 输出: 18
  • 使用 getattr() 函数可以获取对象的方法。
class Heart:
    def talk(self):
        return f'说话'


heart = Heart()
method = getattr(heart, 'talk')
result = method()
print(result)  # 输出: 说话
  • 使用 getattr() 函数获取方法,然后直接调用。
class Heart:
    def talk(self):
        return "说话"


heart = Heart()
method = getattr(heart, 'talk')
result = method()
print(result)  # 输出: 说话

(2)设置对象的属性setattr()

  • 使用 setattr() 函数可以设置对象的属性值。
class Heart:
    def __init__(self):
        self.age = 18

heart = Heart()
setattr(heart, 'age', 100)
print(heart.age)  # 输出: 100

(3)检查对象是否有某个属性或方法hasattr()

  • 使用 hasattr() 函数可以检查对象是否具有指定的属性或方法。
class Heart:
    def __init__(self):
        self.age = 42

heart = Heart()
has = hasattr(heart, 'age')
print(has)  # 输出: True

has1 = hasattr(heart, 'name')
print(has1)  # 输出: False

(4)删除对象属性delattr()

  • 使用 delattr() 函数可以删除对象属性的内建函数。
class Heart:
    def __init__(self):
        self.age = 18

heart = Heart()

# 删除对象的属性
delattr(heart, 'age')

# 尝试访问已删除的属性会引发 AttributeError
# print(heart.age)

# 检查属性是否仍存在
has_attribute = hasattr(heart, 'age')
print(has_attribute)  # 输出: False