• 反射


    反射

    一、getatter, hasatter, delatter

    1、getatter

    class Teacher:
        dic = {'查看学生信息':' ','查看老师信息':' '}
        def show_student(self):
            print('show_student')
        def show_teacher(self):
            print('show_teacher')
        @classmethod
        def func(cls):
            print('hahaha')
    
    ret1 = getattr(Teacher,'dic')  # 获取类Teacher里面的属性dic,可等同于Teacher.dic 类也是对象
    print(ret1)
    ret2= getattr(Teacher,'func')  # 类.方法等同于Teacher.func
    print(ret2)  # 打印的是地址
    ret2()  # 地址加括号才是执行代码

    运行结果:

    {'查看老师信息': ' ', '查看学生信息': ' '}
    <bound method Teacher.func of <class '__main__.Teacher'>>
    hahaha

    2、hasatter

    • getatter和hasatter属于夫妻党,先用hasatter判断是否存在,再用getatter获取对应的方法属性
    class Teacher:
        dic = {'查看学生信息':' ','查看老师信息':' '}
        def show_student(self):
            print('show_student')
        def show_teacher(self):
            print('show_teacher')
        @classmethod
        def func(cls):
            print('hahaha')
    if hasattr(Teacher,'dic4'):  # 判断是否在类Teacher中存在dic4,没有则不会执行以下代码,并且不会报错
        ret = getattr(Teacher,'dic4')
        print(ret)
    if hasattr(Teacher,'dic'):  # 判断是否在类Teacher中存在dic,有则会执行以下代码
        ret1 = getattr(Teacher,'dic')  # 获取类Teacher里面的属性dic,可等同于Teacher.dic 类也是对象
        print(ret1)

    运行结果:

    {'查看学生信息': ' ', '查看老师信息': ' '}

    for循环,用户交互与夫妻档的结合:

    class Teacher:
        dic = {'查看学生信息':'show_student','查看老师信息':'show_teacher'}
        def show_student(self):
            print('show_student')
        def show_teacher(self):
            print('show_teacher')
        @classmethod
        def func(cls):
            print('hahaha')
    
    alex = Teacher()  # 实例化
    print(alex.show_student())  # 对象.方法函数
    print(alex.show_teacher())  # 对象.方法函数
    for k in Teacher.dic:
        print(k)  # 打印字典里面的key
    key = input('输入需求:')  # 根据用户需求是要显示学生的还是老师的
    print(Teacher.dic[key])  # 打印你的需求。也可以不直接打印而是通过下面的夫妻档来完成
    if hasattr(alex,Teacher.dic[key]):  # 夫妻档判断用户输入的需求是否存在
        func = getattr(alex,Teacher.dic[key])
        func()

    运行结果:

    show_student
    None
    show_teacher
    None
    查看学生信息
    查看老师信息
    输入需求:查看学生信息
    show_student
    show_student

    3、小结

    通过反射可以学到:

    • 对象名可以获取对象属性和普通方法
    • 类名可以获取静态属性和类方法还有静态方法
    • 普通函数方法的参数:self
    • 静态方法:@staticmethod
    • 类方法:@classmethod
    • 属性方法:@property
  • 相关阅读:
    PHP之readdir()函数
    PHP之compact()函数
    scanf_s
    GitHub高级搜索
    负载均衡算法
    git操作
    SpringBoot引入监听器
    Redis高可用
    50个常用sql语句 网上流行的学生选课表的例子
    Mysql优化策略
  • 原文地址:https://www.cnblogs.com/wxm422562/p/11094107.html
Copyright © 2020-2023  润新知