python 反射學習

2021-09-12 02:07:25 字數 1959 閱讀 3462

一、反射的方法:

hasattr

(obj,name_str)

:# 判斷 object 是否有 name_str 這個方法或者屬性

getattr

(obj,name_str)

:# 獲取 object 物件與 name_str 同名的方法或者函式

setattr

(obj,name_str,value)

:# 為 object 物件設定乙個同名的方法或者屬性

delattr

(obj,name_str)

:# 刪除 object 物件中的 name_str 方法或者屬性

二、方法的簡單介紹:

getattr :

class

user

:def

__init__

(self, username)

: self.username = username

defget_user

(self)

:return self.username

# 例項化乙個物件:

u = user(

"mouse"

)# 使用者想呼叫的方法

method =

"get_user"

# 通過 hasattr 判斷屬性或方法是否存在

ifhasattr

(u,method)

:# func 接收

func =

getattr

(u,method)

# 執行

print

(func())

else

:print

("操作有誤,請重新輸入"

)>>

>> 輸出結果:

mouse

setattr :
def

hello

(self)

:print

("hello 方法被呼叫了"

)class

user

:pass

u = user(

)# 裝飾乙個方法或屬性 , 此處裝飾的是乙個 hello 方法

setattr

(u,"hello"

,hello)

func =

getattr

(u,"hello"

)func(u)

>>

> 輸出:

hello 方法被呼叫了

delattr :
class

user

:def

__init__

(self,name)

: self.name = name

defeat(self)

:print

('%s 正在吃夜宵 ...'

%self.name)

defrun

(self)

:print

('%s 正在跑步中 ...'

%self.name)

choice =

input

('>>>:'

)c = user(

'胖毛'

)# 這裡以刪除name屬性為例

print

(c.name)

try:

# 先判斷屬性是否存在,存在就刪除

ifhasattr

(c,choice)

:delattr

(c,choice)

else

:pass

print

(c.name)

# 捕獲沒有屬性丟擲的異常

except attributeerror:

print

('刪除%s成功'

%choice)

C 反射學習

using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system.text u...

Java反射學習

應用在一些通用性較高的 中 框架的底層基於反射 在框架開發中,都是基於配置檔案開發,在配置檔案中配置子類,可以通過反射得到類中的所有內容,可以讓類中的某個方法執行 類中的所有內容 屬性 沒有引數的構造方法 有引數的構造方法 普通方法,都可以通過反射機制動態獲得。那麼接下來就看看怎麼通過反射來獲得類中...

php 反射學習

早知道php 有反射的概念一直沒抽出空來。今天看書裡面有個這玩意 弄個例子搞搞。不過似乎專案中用處不大。印象中似乎就 thinkphp 3.1 裡面的 控制器呼叫使用了反射 class person public function set name value public function get...