反射# 通過字串的形式對物件中的成員進行操作(獲取/查詢/新增/刪除)。
操作的內建函式:
1.獲取 getattr(object, name)
# 去物件object中獲取name的內容
classgetattrfoo:
def__init__
(self, name, age):
self.name =name
self.age =age
obj = foo('
lemon147
', 18)
v = getattr(obj, '
name')
(v)>>>lemon147
add = getattr(obj, '
add', '
not find!
') #
如果物件obj中有屬性add則返回self.add的值,否則返回'not find'!
(add)
>>> not find!
2.查詢 hasattr(object, name)
# 檢查物件object中是否有name
classhasattrfoo:
def__init__
(self, name, age):
self.name =name
self.age =age
obj = foo('
lemon147
', 18)
setattr(obj,
'add
', '
123'
)print(getattr(obj, '
add'
))delattr(obj,
'add')
add = hasattr(obj, '
add'
(add)
>>>false
3.新增 setattr(object, name,value)
# 在物件object中設定name的值為value
classsetattrfoo:
def__init__
(self, name, age):
self.name =name
self.age =age
obj = foo('
lemon147
', 18)
setattr(obj,
'add
', '
123'
)add = hasattr(obj, '
add'
(add)
>>>true
print(getattr(obj, '
add'
)) >>>123
4.刪除 delattr(object, name)
# 刪除物件object中的成員name
classdeaattrfoo:
def__init__
(self, name, age):
self.name =name
self.age =age
obj = foo('
lemon147
', 18)
setattr(obj,
'add
', '
123'
)print(getattr(obj, '
add'
))delattr(obj,
'add')
add = hasattr(obj, '
add'
)print(add)
注:getattr,hasattr,setattr,delattr對模組的修改都在記憶體中進行,並不會影響檔案中真實內容。
應用場景
根據輸入或選擇,動態的呼叫不同的模組或功能。(同字典-dictionary 通過key,查詢對應的value類似。)
deftest002s1():
return'首頁
'def
s2():
return'新聞
'def
s3():
return'精華
'
importtest001test002
foo =true
while
foo:
inp = input('
請輸入您要查詢的內容,輸入『q』退出:
') #
輸入『s1』執行『首頁』
ifhasattr(test002, inp):
v =getattr(test002, inp)
(v())
elif inp == 'q'
:
break
else
:
print('
輸入有誤
')
Java學習筆記 反射
使用反射操作類 import org.junit.test public class testdemo 要對乙個類進行例項化有兩種方法 1 可以new 2 不new 使用反射獲取方式如下 操作無參構造方法 操作無引數的構造方法 test public void test1 throws except...
Golang學習筆記 反射
反射讓我們可以在執行時獲取物件的型別資訊,比如檢視乙個結構體有多少字段,檢視函式的入參型別和返回值型別等。go提供了reflect.typeof 和reflect.valueof獲取任意物件的reflect.value和reflect.type,其中reflect.type是乙個介面型別,該介面提供...
python基礎學習 反射
所謂的反射,就是通過字串去訪問類或物件成員,比如如果乙個student類有乙個name物件屬性,那麼就可以通過乙個 name 字串去訪問student物件的name屬性 如python可以通過hasattr 函式來獲取乙個物件是否有某個屬性 class student def init self,n...