getattr() 指定乙個方法名字,獲取該方法的記憶體位址
hasattr() 判斷乙個方法是否存在於例項中
setattr() 設定或者新增方法
delattr() 刪除方法
1、 getattr(obj, name) obj就是類的例項化(如果是呼叫函式的話,obj就是函式所在的包名), name就是方法名,需要注意方法名必須用引號引起來
2、備註: test0622中包含有f1 f2 f3三個函式,及person類,person類中有乙個方法info
下邊是練習
# coding utf-8
import test0622
# 呼叫test0622模組中的函式f3, 注意getattr的第乙個引數是模組名,第二個引數是函式名,但是函式名需要以字串的形式來傳參
test1 = getattr(test0622, 'f3')
test1()
# 如何找到person類中的info方法,並且呼叫它(用反射的方法)
# 第一步類的是例項化
obj = test0622.person()
# 判斷person類中是否有info方法,如果找到就執行,如果沒找到,輸出未找到info
if hasattr(obj, 'info'):
f = getattr(obj, 'info')
f()else:
print("未找到info")
# 設定或者新增類的內容
# 第一步類的是例項化
# 注意必須先例項化,如果直接寫setattr(test0622.person(), 'exit', 'this is exit method')會報錯
# obj = test0622.person() 上邊已經有過例項化了,這個就不再寫一次了
setattr(obj, 'exit', 'this is exit method')
# 第二步判斷類裡邊是否有exit方法,hasattr返回true表示有,false表示無,exit並不會寫入到person類,只是能調通
f = hasattr(obj, 'exit')
print(f)
# next學習下delattr
delattr(obj, 'exit')
f1 = hasattr(obj, 'exit')
# 輸出false表示刪除成功
print(f1)
反射 方法的反射04
方法的反射 1.如何獲取某個方法 方法的名稱和方法的引數列表才能唯一的決定某個方法 2.方法反射的操作 method.invoke 1.要獲取乙個方法就是獲取類的資訊,獲取類的資訊首先獲取類的類型別 student s new student class c s.getclass 2.獲取方法,由名...
java反射 4 反射賦值
本篇介紹利用反射給物件賦值 方法1 獲得並使用預設構造器建立類的物件 並對物件賦值 這裡類用的是person類 屬性有 id name address 來做例子 public class person public void setid integer id public string getnam...
反射 4 Type反射
1 activator.createinstance type t 會動態呼叫類的public無參建構函式建立乙個物件,返回值就是建立的物件,如果類沒有無參建構函式就會報錯。2 應用 動態建立物件sayhello。介面宣告到單獨的專案中,避免迴圈引用。如下 using system using sy...