zoukankan      html  css  js  c++  java
  • 反射

    反射

    一、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
  • 相关阅读:
    Oracle 实现数据表插入时主键列自增
    Java BigDecimal 加减乘除用法
    php最常见最经典的算法题(1)
    2、php-选择排序方法
    1、php-冒泡排序方法
    65G-一系列Go语言课程Go基础知识高级Go项目战斗New Go语言和区块链开发实践课程
    css
    python基础
    SEO优化指南
    转载GXT之旅
  • 原文地址:https://www.cnblogs.com/wxm422562/p/11094107.html
Copyright © 2011-2022 走看看