issubclass,type,isinstance反射

Posted shuai-aoli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

 

以上是关于issubclass,type,isinstance反射的主要内容,如果未能解决你的问题,请参考以下文章

issubclass,type,isinstance反射

类的判断函数:issubclass,type,isinstance

isinstance type issubclass

python反射/issubclass&type&isinstance

Python - - 面向对象 - - 面向对象进阶

面向对象中特殊方法的补充isinstance/issubclass/type方法和函数反射