16.1反射

反射

反射就是經過字符串的形式,導入模塊;經過字符串的形式,去模塊尋找指定函數,並執行。利用字符串的形式去對象(模塊)中操做(查找/獲取/刪除/添加)成員,一種基於字符串的事件驅動。ide

# -*-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")
相關文章
相關標籤/搜索