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()
  • 相关阅读:
    Rpc简单入门
    对话Task
    对话线程
    译MassTransit 生产消息
    MassTransit 实现应用程序间交互
    译MassTransit 消息契约
    轻松理解AOP思想(面向切面编程)
    Elasticsearch 全教程
    Elasticsearch 教程--搜索
    Elasticsearch 教程--数据
  • 原文地址:https://www.cnblogs.com/P-Z-W/p/11063358.html
Copyright © 2011-2022 走看看