python note 24 反射

1、issubclass用法

class Base(object):
    pass

class Foo(Base):
    pass

class Bar(Foo):
    pass

print(issubclass(Bar,Base)) #检查第一个参数是否是第二个参数的 子子孙孙类

2、type用法

class Foo(object):
    pass

obj = Foo()
print(obj,type(obj)) #获取当前对象是由那个类创建。

3、isinstance用法

class Base(object):
    pass

class Foo(Base):
    pass
obj = Foo()
print(isinstance(obj,Base)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。

4、查看方法和函数

from types import MethodType,FunctionType
def check(arg):
    """
    检查arg是方法还是函数?
    :param arg:
    :return:
    """
    if isinstance(arg,MethodType):
        print('arg是一个方法')
    elif isinstance(arg,FunctionType):
        print('arg是一个函数')
    else:
        print('不知道是什么')

5、反射

getattr # 根据字符串的形式,去对象中找成员。
hasattr # 根据字符串的形式,去判断对象中是否有成员。
setattr # 根据字符串的形式,动态的设置一个成员(内存)
delattr # 根据字符串的形式,动态的删除一个成员(内存)

应用

class Account(object):

    def login(self):
        print("登录")

    def logout(self):
        print("登出")

    def register(self):
        print("注册")

    def run(self):
        choice_list = ["login","logout","register"]
        print('''
            输入要执行的功能
                1、登录
                2、登出
                3、注册
        ''')
        choice = int(input("输入选择的序号 : "))
        fun_name = choice_list[choice - 1]
        func = getattr(self,fun_name)
        func()

obj = Account()
obj.run()

 

posted @ 2019-06-21 10:55  P-Z-W  阅读(117)  评论(0编辑  收藏  举报