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)

 

posted @ 2019-06-04 21:53  傲立_帅  阅读(118)  评论(0编辑  收藏  举报