zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    十六进制计算器
    USB 3.0规范中译本 第7章 链路层
    from表单POST提交nodejs
    07_通过谷歌封装的api操作数据库delete&insert
    06_直接执行sql操作数据库delete&update
    05_直接执行sql操作数据库
    04_数据库升级onUpgrade&ondowngrade
    03_通过OpenHelper获取SqliteDatabase对象
    02_SQliteOpenHelper介绍&oncreate方法介绍
    00_前情回顾&今日展望
  • 原文地址:https://www.cnblogs.com/P-Z-W/p/11063358.html
Copyright © 2011-2022 走看看