溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python 之 類(lèi)的反射

發(fā)布時(shí)間:2020-07-24 10:06:06 來(lái)源:網(wǎng)絡(luò) 閱讀:183 作者:wx592bc92b285c7 欄目:編程語(yǔ)言

類(lèi)的反射作用

當(dāng)一個(gè)類(lèi)中,帶有多個(gè)方法時(shí),要求用戶(hù)輸入方法名,并調(diào)用相應(yīng)函數(shù),此時(shí)就可使用類(lèi)的反射方法,來(lái)快速調(diào)用相應(yīng)函數(shù),而不再需要使用多個(gè)IF判斷條件語(yǔ)句。

類(lèi)的反射方法

  1. hasattr(obj,name_str) 判斷一個(gè)對(duì)象OBJ里是否有對(duì)應(yīng)的name_str字符串的方法
  2. getattr(obj,name_str) 根據(jù)字符串去獲取obj對(duì)象里的對(duì)應(yīng)方法的內(nèi)存地址
  3. setattr(obj,'y',z) 相當(dāng)于 obj.y = 'v'
  4. delattr(obj,name_str) 刪除一個(gè)對(duì)象

代碼

#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("請(qǐng)輸入你想要的:>>")
if hasattr(Dog,choice):             #判斷Dog類(lèi)是否有此方法
    func = getattr(d1,choice)       #調(diào)用該方法(返回值為函數(shù)地址)
    func()                          #運(yùn)行該函數(shù),并可傳值
else:
    print("你輸入的方法有誤?。。?!")

結(jié)果:
請(qǐng)輸入你想要的:>>eat
二哈 is eatting....

請(qǐng)輸入你想要的:>>eat
二哈 is eatting....
向AI問(wèn)一下細(xì)節(jié)
AI