zoukankan      html  css  js  c++  java
  • 反射

    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)
  • 相关阅读:
    定位CPU占用高的线程并打印其堆栈信息
    单生产者和单消费者共同操作同一个消息队列需要加锁吗
    cmake多目录,生成so的模板
    【秒懂音视频开发】25_H.264解码实战
    【秒懂音视频开发】24_H.264编码实战
    【秒懂音视频开发】23_H.264编码
    【秒懂音视频开发】22_显示YUV图片
    【秒懂音视频开发】21_显示BMP图片
    【秒懂音视频开发】20_视频录制02_编程
    【秒懂音视频开发】19_视频录制01_命令行
  • 原文地址:https://www.cnblogs.com/qj696/p/10630861.html
Copyright © 2011-2022 走看看