反射

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)
原文地址:https://www.cnblogs.com/qj696/p/10630861.html