issubclass,type,isinstance反射
1, issubclass
判断前一个是不是后一个的子类,或者说是后辈
1 class Animal: 2 pass 3 class Cat(Animal): 4 pass 5 class Boshicat(Cat): 6 pass 7 8 print(issubclass(Cat,Animal)) 9 print(issubclass(Boshicat,Animal)) 10 print(issubclass(Cat,Boshicat)) 11 12 13 运行结果 14 True 15 True 16 False
2,type
type: 精准的给出对象的类
1 class Animal: 2 pass 3 class Cat(Animal): 4 pass 5 class Boshicat(Cat): 6 pass 7 8 9 c = Cat() 10 print(type(c)) 11 print(type(c) == Cat) 12 print(type(c) == Animal) 13 print(type(c) == Boshicat) 14 15 16 运行结果 17 18 <class '__main__.Cat'> 19 True 20 False 21 False
3,isinstance
isinstance:判断一个对象是不是一个类(子类的对象可以当成父类的类型来看)
1 class Animal: 2 pass 3 class Cat(Animal): 4 pass 5 class Boshicat(Cat): 6 pass 7 8 c = Cat() 9 10 print(isinstance(c,Animal)) 11 print(isinstance(c,Cat)) 12 print(isinstance(c,Boshicat)) 13 14 15 运行结果 16 17 True 18 True 19 False
4,反射
通过字符串映射或修改程序运行时的状态、属性、方法, 有以下4个方法:
hasattr(obj,name_str) 判断一个对象obj里是否有对应的name_str字符串的方法,返回一个布尔值
getattr(obj,name_str) 根据字符串去获取obj对象里的对应的方法的内存地址
setattr(obj,'y',z) 将给定对象的命名属性设置为指定的值
delattr(x, 'y') 从给定对象中删除指定的属性
我有一个master.py文件
1 master.py 2 3 name = '大牛' 4 def chi(): 5 print("吃了很多") 6 def he(): 7 print("喝了很多") 8 def la(): 9 print("拉了很多") 10 def sa(): 11 print("撒了很多")
我要在另一个文件中通过输入去调用其中的函数
1 test.py 2 3 import master 4 5 print(''' 6 chi 7 he 8 la 9 sa 10 name 11 ''') 12 while 1: 13 val = input("输入操作") 14 if hasattr(master,val): 15 attr = getattr(master,val) 16 if callable(attr): 17 attr() 18 else: 19 print(attr)