python反射例項化 Python的類反射機制

2021-10-13 01:45:16 字數 1630 閱讀 7750

反射就是通過字串的形式,匯入模組;通過字串的形式,去模組尋找指定函式並執行。

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...