反射就是通過字串的形式,匯入模組;通過字串的形式,去模組尋找指定函式並執行。
python有四個內建函式:
函式功能
getattr(object, attr[, default])
獲取指定字串名稱的物件屬性或方法,如果物件有該屬性則返回屬性值,如果有該方法則返回該方法的記憶體位址,如果都沒有就報錯,如果指定了預設值找不到不會報錯會取預設值
hasattr(object, attr)
判斷指定字串名稱的物件是否有該屬性或方法,返回true或false
setattr(object, attr, value)
為指定字串名稱的物件設定屬性,如果物件已有該屬性則覆蓋屬性值,如果沒有該屬性則新增屬性並賦值
delattr(object, attr)
刪除指定字串名稱的物件的某屬性,如果物件沒有該屬性會報錯
示例:class demo:
def __init__(self):
self.name = 'abc'
def method(self):
pass
# 例項化
d = demo()
# 獲取物件中的屬性、方法
name = getattr(d, 'name')
func = getattr(d, 'method')
print(name)
print(func)
print('\r')
# 檢視是否有屬性或方法
print(hasattr(d, 'name'))
print(hasattr(d, 'method'))
print(hasattr(d, 'abc'))
# 設定物件的屬性值
setattr(d, 'name', 'aaa') # 已有的屬性值會修改
setattr(d, 'age', 10) # 沒有該屬性會新增並賦值
# 刪除物件的屬性
delattr(d, 'name')
輸出結果:
abctrue
true
false
反射的使用
demo1:
# 導包
time = __import__('time')
# 獲取方法
sleep = getattr(time, 'sleep')
# 呼叫
sleep(5)
等價於:
# 1import time
time.sleep(5)
# 2from time import sleep
sleep(5)
demo2:
# 導包
webdriver = __import__('selenium.webdriver', fromlist=['webdriver'])
# 例項化,獲取方法
driver = webdriver.chrome()
quit = getattr(driver, 'quit')
# 呼叫方法
quit()
等價於:
from selenium import webdriver
driver = webdriver.chrome()
driver.quit()
python反射例項化 python反射
定義 通過字串的形式去操作物件 類,例項物件,模組中的物件 中的成員 增刪改查 叫反射。一 類例項物件class foo tests test def init self,name,age self.name name self.age age def show self return s s se...
Java程式設計 反射( 反射例項化物件)
反射例項化物件 若有了class類物件,則可以做到利用反射來實現物件例項化操作。1 例項化物件方法 public tnewinstance throws instantiationexception,illegalacces ception 建立此 class 物件所表示的類的乙個新例項。如同用乙個...
(反射應用案例)反射例項化物件
獲取class物件最大的意義是class類裡面提供有乙個物件的反射例項化方法 代替了關鍵字new 範例 通過newinstance 例項化乙個物件 建立person類package reflect public class person override public string tostring...