美文网首页
python反射

python反射

作者: StephenZhang01 | 来源:发表于2018-09-23 19:26 被阅读0次

概念

运行时: 区别于编译时,指程序被加载到内存中执行的时候.

反射(自省): 指运行时获取对象的类型信息.

具有反射能力的函数:type(), isinstance(), getattr()等.

作用: 通过字符串映射或修改程序(内存)运行时的状态、属性、方法.

注意:对实例动态添加属性时(setattr方法),注意该添加的方法不会绑定实例(使用时,相当于普通函数调用,参数需要填入).所以应该将方法添加到类对象中,而非该类对象的实例.


语法

a)  hasattr(object,name)

判断对象里是否有相应字符串的方法。如read里 输入run方法。

print(hasattr(h, read))

b)  getattr(object,name,default=None)

获取字符串里的对象方法内存地址

print(getattr(h, read))# 映射对象的方法所在的内存地址

print(getattr(h, read)())# 加()执行对象方法

c)  setattr(obj.name,value)

为对象创建新的方法(或将类之外的方法、属性添加到类中)

obj.name = value

d)  delattr(x,y)

删除对象中的方法


例:利用反射使函数解耦

class New(object):

    def __init__(self):

        pass

    def input(self):

        while True:

            inp = input('>>> ')

            cmd = inp.split()[0]

            if hasattr(self,cmd):

                func = getattr(self,cmd)

                func(cmd)

            else:

                print('{new} is not exist' .format(new=cmd))

                continue

    def inter(self,*args):

        x = args[0]

        print(x)

a1 = New()

a1.input()

例:利用反射,执行模块方法

# 编写test2.py文件

def add():

   print('add')

def del_1():

   print('del')

def fetch():

   print('fetch')

# 编写test1.py文件

import test2

list1 = [

   {'cap':'add user', 'func':'add'},

   {'cap':'del uesr', 'func':'del_1'},

   {'cap':'search user', 'func':'fetch'}

]

for index, item in enumerate(list1, 1):

   print(index, item['cap'])

def ch():

   choice = input('input num above menu: ')

   choice = int(choice)

   if choice in range(1,4):

       func_name = list1[choice-1]['func']

       func = getattr(test2, func_name)

       func()

   else:

       print('error! out of range!')

       return ch()

if __name__ == '__main__':

   ch()

相关文章

  • python反射

    我们可通过反射添加、修改、删除某个对象的属性和方法:hasattr(object,str):判断该对象是否含有该方...

  • Python 反射

    反射:本质是利用字符串的形式去对对象/模块进行操作其成员,一种基于字符串的时间驱动。以我现在的理解,就是本来需要显...

  • Python 反射

    概述 运行时,区别于编译时,指的是程序被加载到内存中执行的时候。反射,reflection,指的是运行时获取类型定...

  • python反射

    概念 运行时: 区别于编译时,指程序被加载到内存中执行的时候. 反射(自省): 指运行时获取对象的类型信息. 具有...

  • Python 反射

    反射: 通过字符串的形式来导入模块,并以字符串的形式执行函数 应用,大部分应用在web框架中。

  • Python 反射

    首先说说反射是什么?反射是可以以字符串的形式动态调用函数的过程。 当然反射不只是字符串的函数执行,她和exec和e...

  • python 反射

    反射 dir() 拿到对象所有属性https://zhuanlan.zhihu.com/p/99150129[ht...

  • python 反射

    python 反射 -解释类型的语言,在程序被加载到内存运行的时候,可以通过某种方p式获取对象的类型、属性等信息的...

  • 面向对象:反射,内置方法

    反射 python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使...

  • __import__ 反射和面向对象基础 self 封装 继承(

    一、反射 python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、del...

网友评论

      本文标题:python反射

      本文链接:https://www.haomeiwen.com/subject/fsifnftx.html