反射在python中是乙個很重要的東西,但是具體怎麼用呢?讓我們來看看。
首先我們來建立乙個類,並且定義了2個普通方法,和乙個類方法
class
foo:
dic =
deffunc1
(self)
:print
('func1'
)def
func2
(self)
:print
('func2'
) @classmethod
deffunc3
(cls)
:print
('func3'
)
python反射中給我們提供了乙個getattr()的方法,我們可以通過這個方法使用字串的形式來獲取到這個類的變數和類方法,並且加以呼叫
'''
'''ret1 =
getattr
(foo,
'dic'
)ret2 =
getattr
(foo,
'func3'
)ret2(
)print
(ret2)
func3
同樣伴隨getattr()方法的還有乙個hasattr()方法,它主要用來判斷是否存在傳入的值
if
hasattr
(foo,
'fun4'):
ret =
getattr
(foo,
'fun4'
)print
(ret)
那麼普通方法我們要怎麼呼叫呢?其實也很簡單,首先例項化該類,得到乙個物件後,把該物件和方法字串傳入即可
'''
'''test = foo(
)ret =
getattr
(test,
'func1'
)ret(
)fun1
說了這麼多,到底這個反射能給我們帶來什麼好處呢?比如說現在有這麼乙個需求,就是通過輸入去執行對應的方法
我們可以看到 如果我不用到反射機制我需要乙個個的去判斷,非常的麻煩,但是用到了反射後我不需要去關心你輸入的是什麼,我只要有相應的方法就能呼叫到
msg =
input
('請輸入對應操作'
)if msg ==
'foo1'
: func1(
)elif
: msg ==
'foo2'
: func2(
)elif
: msg ==
'foo3'
: func3(
)#反射
ret =
getattr
(foo,msg)
ret(
)
Python 反射的用法
在做程式開發中,我們常常會遇到這樣的需求 需要執行物件裡的某個方法,或需要呼叫物件中的某個變數,但是由於種種原因我們無法確定這個方法或變數是否存在,這是我們需要用乙個特殊的方法或機制要訪問和操作這個未知的方法或變數,這中機制就稱之為反射。接下記錄下反射幾個重要方法 判斷物件中是否有這個方法或變數 c...
python 反射的用法
class foo def init self,name self.name name def text self return 123f foo 1 hasattr obj,name 判斷乙個物件裡面是否有name屬性,或者name方法,返回bool值,有name特性返回ture,否則 返回fal...
Python反射的用法例項分析
在做程式開發中,我們常常會遇到這樣的需求 需要執行物件裡的某個方法,或需要呼叫物件中的某個變數,但是由於種種原因我們無法確定這個方法或變數是否存在,這是我們需要用乙個特殊的方法或機制要訪問和操作這個未知的方法或變數,這中機制就稱之為反射。接下記錄下反射幾個重要方法 hasattr 判斷物件中是否有這...