一.issubclass / type / isinstance
1.issubclass :(子类,父级) 判断是否是某个类的子类(子子孙孙),返回True或False
class foo(object): def slet(self): pass class foo1(foo): def set(self): pass class foo2(foo1): def set(self): pass print(issubclass(foo,foo1)) print(issubclass(foo2,foo)) print(issubclass(foo2,foo1)) <<<< False True True
2.type 面向对象这里是获取当前对象是由哪个类创建的
class foo(object): pass obj = foo() print(type(obj)) # 获取当前对象是由哪个类创建的
3.isinstance:检查第一个参数(对象)是否是第二个参数(类及父类) 的实例 只要是创建他的类的父类都是True
class foo(object): pass class foo1(foo): pass class foo2(foo1): pass obj = foo1() print(isinstance(obj,foo)) # 检查第一个参数(对象)是否是第二个参数(类及父类) 的实例 只要是创建他的类的父类都是True print(isinstance(obj,foo1)) print(isinstance(obj,foo2)) <<< True True False
二、反射 hasarrt / getarrt / setarrt / delarrt 依次为:检查是否有某成员、获取成员、设置成员、删除成员
class foo(object): def __init__(self): self.age = 22 def func(self): print(222) obj = foo() print(hasattr(obj,"age")) <<<True print(getattr(obj,"age")) <<<22 setattr(obj,"age",[1,2,3,4]) # 可在内存中新建成员 也可设置成员 print(obj.age) <<<[1,2,3,4] delattr(obj,"age") # 删除成员
在面向对象中应用
class foo(object): def login(self): print("登录") def exit(self): print("退出") def rigester(self): print("注册") def run(self): run_list = ["login","rigester","exit"] print(''' 1.登录 2.注册 3.退出 ''') ret = int(input("请输入序号:")) if 0<ret<=len(run_list): s = run_list[ret - 1] res = getattr(self, s) res() else: print("没有该功能,请输入有效的序号") obj = foo() obj.run()