python(27) 反射 動態裝飾函式

2021-10-04 14:07:34 字數 1818 閱讀 8577

1.類外面的函式要裝到類裡怎麼辦?

2.呼叫哪個函式我事先並不知道,通過字串的輸入來確定呼叫哪個,這該如何處理?

動態裝飾很好的解決了這個問題。與其它語言相比,python裡實現起來還是容易的。

"""

動態裝飾函式

通過字串調動函式名

#hasattr(obj,name_str) 判斷 乙個物件obj,是否有對應的name_str

#getattr(obj,name_str) 根據字串去獲取obj物件裡的對應的方法的記憶體位址,

#setattr(obj,'y',z) 設定obj 屬性名為y,新值為z

# delatter(obj,'v') 刪除物件obj v的值

1.動態裝乙個方法

2.動態裝乙個屬性

3.刪除乙個屬性或者方法

"""def bulk(self):

print("%s is yelling"%self.name)

class dog(object):

def __init__(self,name):

self.name=name

def eat(self):

print("%s is eating..."%self.name)

d=dog("mydog") #1.例項化物件

funname=input(">>:").strip() #1.新方法 1.1輸入字串

if (hasattr(d,funname)): #1.2hasattr(obj,name_str) 1.判斷 乙個物件obj,是否有對應的name_str

func=getattr(d,funname) #1.3 getattr(obj,name_str) 2. 乙個物件obj, 對映出記憶體物件的位址

else:

setattr(d,funname,bulk) #1.4新方法 setattr(d,name_str) 外面函式bulk與funname關聯起來 裝到類裡面 bulk

d.talk(d) #1.5後面的字串名稱可以隨便定義,但呼叫的是前一句話的值

proname = input(">>:").strip() # 2.新屬性

if (hasattr(d,proname)): #2.1 hasattr(obj,name_str)

attr=getattr(d,proname) # 2.2 得到對應的屬性字串

setattr(d,proname,"newpro") # 2.3 (obj,屬性名,新屬性值)

else:

setattr(d, proname, "newpro")

attr = getattr(d, proname)

print(attr) # 列印屬性

delname = input(">>:").strip() # 3.刪除

if (hasattr(d, delname)): # hasattr(obj,name_str)

delattr(d,delname)

else:

setattr(d, proname, "newpro")

attr = getattr(d, proname)

print(d.name) # 刪除後再列印

python(27) 反射 動態裝飾函式

1.類外面的函式要裝到類裡怎麼辦?2.呼叫哪個函式我事先並不知道,通過字串的輸入來確定呼叫哪個,這該如何處理?動態裝飾很好的解決了這個問題。與其它語言相比,python裡實現起來還是容易的。動態裝飾函式 通過字串調動函式名 hasattr obj,name str 判斷 乙個物件obj,是否有對應的...

python2 7換行 Python2 7基礎語法

1.建立檔案xx.py usr bin python3 print hello,world 2.linux下執行 python hello.py 3.編碼 預設字串unicode 設定編碼 coding utf 8 4.識別符號 第乙個字元必須是字母表中字母或下劃線 識別符號的其他的部分有字母 數字...

python2 7是什麼 python2 7是什麼

pyton2.7是python在2010年發布的乙個版本。python 是乙個高層次的結合了解釋性 編譯性 互動性和物件導向的指令碼語言,具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。下面來解釋一下python這門語言 python是一種...