面向对象04

反射

 

# # 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()

 

 

猜你喜欢

转载自www.cnblogs.com/woshiliuwenbo/p/9562243.html