• 反射


    isinstance, type,issubclass的区别

    issubclass():是判断一个类是否是另一个类的子类(print(issubclass(A, class)) 返回值为(Flase  or  True)

    type():判断类(print(type())>>class  )只能上一级

    isinstance:判断A是否为B的类型 (print(isinstance(A, class)) 返回值为(Flase  or  True)

    反射

    class  Person:
        def chi(self):
            print("")
        def he(self):
            print("")
        def la(self):
            print("")
        def sa(self):
            print("")
        def shui(self):
            print("")
    
        def run(self):
            lst = ['chi', 'he', 'la', 'sa', 'shui']
        #     num =int(input("""本系统有以下功能
        #  1. 吃
        #  2. 喝
        #  3. 拉
        #  4. 撒
        #  5. 睡
        # 请选择你要执⾏的功能:"""))
    
            # 通过类名也可以使⽤
    
             func = getattr(Person, lst[num - 1])
             func(self)
             method = getattr(self, lst[num-1])
             method()
          #输入序号通过列表来反射      
             em =(input("""本系统有以下功能
             1. 吃
             2. 喝
             3. 拉
             4. 撒
             5. 睡
            请选择你要执⾏的功能:"""))
            func = getattr(Person, em)
            func(self)
          #直接通过元素来反射
    p = Person()
    p.run()
    (注:run函数一定要放到类里面)

    补充:
    关于反射, 其实一共有4个函数:
    1. hasattr(obj, str) 判断obj中是否包含str成员
    2. getattr(obj,str) 从obj中获取str成员
    3. setattr(obj, str, value) 把obj中的str成员设置成value. 注意. 这里的value可以是
    值,只能是属性不能是方法。(value可以是属性也可以是方法,但是方法不能绑定)
    4. delattr(obj, str) 把obj中的str成员删除掉

    if hasattr(master, gn): # 如果master⾥⾯有你要的功能
     # 获取这个功能, 并执行
        attr = getattr(master, gn)
     # 判断是否是函数. 只有函数才可以被调⽤
     if isinstance(attr, FunctionType):
         attr()
     else:
     # 如果不是函数, 就打印
         print(attr)
    if hasattr(master, gn): # 如果master⾥⾯有你要的功能
     # 获取这个功能, 并执行
        attr = getattr(master, gn)
     # 判断是否是函数. 只有函数才可以被调⽤
     if isinstance(attr, FunctionType):
         attr()
     else:
     # 如果不是函数, 就打印
         print(attr)
  • 相关阅读:
    android studio 中如何合并冲突(转)
    关于学习ZigBee的书籍
    多一点学习之外的人文思考
    有关技术文档的一点感想
    有关文学知识对我大学生活的影响
    【转】华为PCB布线规范
    【转】怎么样从一个疯狂下载者成为一个学习者!!!值得反省下的问题·~~
    时钟1
    关于有源滤波器和无源滤波器
    【转】zz个人的制板习惯流程
  • 原文地址:https://www.cnblogs.com/qj696/p/10630861.html
Copyright © 2020-2023  润新知