• 反射


    反射

    一、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
  • 相关阅读:
    获取微信用户在微信小店的订单
    微信网页授权+获取用户基本信息+强制关注+JSSDK分享参数
    微信查询四六级成绩代码
    CURL SSL为6的由来
    阿里云虚拟主机安装禅道总结
    Android手机特殊软件配置
    微信支付参数一致性校验
    微信查询火星天气
    php下curl ssl常用问题
    群发技术-使用python3给微信好友群发消息
  • 原文地址:https://www.cnblogs.com/wxm422562/p/11094107.html
Copyright © 2020-2023  润新知