反射

反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动。

# -*-coding:utf-8 -*-

# 反射在其他语言中执行效率比较低,在Python中执行效率高

class foo:

    def __init__(self,name,age):
        self.name=name
        self.age=age

    def show(self):
        return "%s-%s"%(self.name,self.age)

obj=foo("jiaxin",18)
print(obj.name)

b="name"
#obj.b
# AttributeError: 'foo' object has no attribute 'b'

getattr,hasattr,setattr,delattr四个函数

print(obj.__dict__[b])

#getattr
#setattr
#hasattr
#delattr

#去什么东西里面获取什么属性
v=getattr(obj,"name")
print(v)
# jiaxin

func=getattr(obj,"show")
print(func)
# <bound method foo.show of <__main__.foo object at 0x000000BA7888AB38>>
print(func())
# jiaxin-18

print(hasattr(obj,"name"))
# True  用于判断是否有name成员

setattr(obj,"m1","n1")
print(obj.m1)  #这个m1是存在对象中的
# n1

delattr(obj,"m1")