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)