21. 反射

一、什么是反射

  Python 是一种动态语言,而反射(reflection)机制被视为动态语言的关键。反射机制指的是在程序的运行过程中,对于任意一个类,都可以知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意方法和属性。这种动态获取程序信息以及动态调用对象的功能称为 反射机制

  反射,本质上就是通过字符的形式去操作对象/模块中的成员。在 Python 中,我们可以通过四个内置函数去实现反射相关的功能。

getattr(object, name)                                                           # 获取对象中的成员
getattr(object, name, default)                                                  # 获取对象中的成员,如果没有则返回default指定的指
setattr(object, name, value)                                                    # 设置对象中的成员
hasattr(object, name)                                                           # 判断对象的成员是否存在
delattr(object, name)                                                           # 删除对象的成员是否存在
class Person:

    def __init__(self,name,age):
        self.name = name
        self.age = age
  
    def show_info(self):
        print("你猜猜我是谁?")

p = Person("Sakura", 10)

if hasattr(p, "name"):                                                          # 判断对象的成员是否存在
    name = getattr(p, "name", None)                                             # 获取对象中的成员
    print(name)

if hasattr(p, "age"):                                                           # 判断对象的成员是否存在
    age = getattr(p, "age")                                                     # 获取对象中的成员
    print(age)

    setattr(p, "age", 12)                                                       # 设置对象中的属性
    age = getattr(p, "age")                                                     # 获取对象中的成员
    print(age)

    delattr(p, "age")                                                           # 删除对象中的属性值
    print(p.__dict__)

if hasattr(p,"show_info"):
    func = getattr(p, "show_info")
    func()

    setattr(p,"show_info", lambda : "我是一个无忧无虑的人")

    func = getattr(p, "show_info")
    msg = func()
    print(msg)
posted @ 2024-10-23 20:10  星光映梦  阅读(26)  评论(0)    收藏  举报