反射
# # isinstance,检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 # class Base(object): # pass # # class Foo(Base): # pass # # obj1 = Foo() # print(isinstance(obj1, Foo)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 # print(isinstance(obj1, Base)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 # obj2 = Base() # print(isinstance(obj2,Foo)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 # print(isinstance(obj2,Base)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 # type:# 获取当前对象是由那个类创建。 # class Foo(object): # pass # # obj = Foo() # # print(obj,type(obj)) # 获取当前对象是由那个类创建。 # if type(obj) == Foo: # print('obj是Foo类型') # issubclass:检查第一个参数是否是第二个参数的 子子孙孙类 # class Base(object): # pass # # class Foo(Base): # pass # # class Bar(Foo): # pass # # print(issubclass(Bar,Base)) # 检查第一个参数是否是第二个参数的 子子孙孙类
# getattr # 根据字符串的形式,去对象中找成员。
# hasattr # 根据字符串的形式,去判断对象中是否有成员。
# setattr # 根据字符串的形式,动态的设置一个成员(内存)
# delattr # 根据字符串的形式,动态的删除一个成员(内存)
例子
# from types import FunctionType #调用 # import handler #引用自己创建的模块 # # while True: # print(""" # 系统支持的函数有: # 1. f1 # 2. f2 # 3. f3 # 4. f4 # 5. f5 # """) # val = input("请输入要执行的函数:") # val = "f1" # # # # if hasattr(handler,val): # func_or_val = getattr(handler,val) # 根据字符串为参数,去模块中寻找与之同名的成员。 # if isinstance(func_or_val,FunctionType): # func_or_val() # else: # print(func_or_val) # else: # print('handler中不存在输入的属性名') # # 正确方式 # """ # if val == 'f1': # handler.f1() # elif val == 'f2': # handler.f2() # elif val == 'f3': # handler.f3() # elif val == 'f4': # handler.f4() # elif val == 'f5': # handler.f5()
例
# class Account(object): # func_list = ['login', 'logout', 'register'] # # def login(self): # """ # 登录 # :return: # """ # print('登录111') # # def logout(self): # """ # 注销 # :return: # """ # print('注销111') # # def register(self): # """ # 注册 # :return: # """ # print('注册111') # # def run(self): # """ # 主代码 # :return: # """ # print(""" # 请输入要执行的功能: # 1. 登录 # 2. 注销 # 3. 注册 # """) # # choice = int(input('请输入要执行的序号:')) # func_name = Account.func_list[choice - 1] # # # func = getattr(Account,func_name) # Account.login # # func(self) # # func = getattr(self, func_name) # self.login # func() # # # obj1 = Account() # obj1.run() # # obj2 = Account() # obj2.run()