類的反射作用
當一個類中,帶有多個方法時,要求用戶輸入方法名,並調用相應函數,此時就可使用類的反射方法,來快速調用相應函數,而不再需要使用多個IF判斷條件語句。
類的反射方法
- hasattr(obj,name_str) 判斷一個對象OBJ裏是否有對應的name_str字符串的方法
- getattr(obj,name_str) 根據字符串去獲取obj對象裏的對應方法的內存地址
- setattr(obj,'y',z) 相當於 obj.y = 'v'
- delattr(obj,name_str) 刪除一個對象
代碼
#Author Kang
class Dog(object):
def __init__(self,name):
self.Name = name
def eat(self):
print("%s is eatting...."%(self.Name))
def talk(self):
print("%s is talking...."%self.Name)
def sleep(self):
print("%s is sleep...."%self.Name)
def walk(self):
print("%s is walking..."%self.Name)
def alert(self):
print("此方法不存在")
d1 = Dog("二哈")
choice = input("請輸入你想要的:>>")
if hasattr(Dog,choice): #判斷Dog類是否有此方法
func = getattr(d1,choice) #調用該方法(返回值爲函數地址)
func() #運行該函數,並可傳值
else:
print("你輸入的方法有誤!!!!")
結果:
請輸入你想要的:>>eat
二哈 is eatting....
請輸入你想要的:>>eat
二哈 is eatting....