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是一種...