反射的4個方法

2022-07-26 19:24:11 字數 1207 閱讀 9126

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