反射

反射

反射指的是經過 「字符串」 對對象的屬性和方法進行操做,python內置的方法python

一、hasattr

經過 「字符串」 判斷對象的屬性或方法是否存在code

二、getattr

經過 「字符串」 獲取對象的屬性或方法對象

三、setattr

經過 「字符串」 設置對象的屬性或方法ip

四、delattr

經過 「字符串」 刪除對象的屬性或方法字符串

class Foo:
    x = 10
    y = 20
    def date(self):
        print('天王蓋地虎,小雞燉蘑菇')

obj = Foo()
# 判斷對象屬性或方法是否存在
print(hasattr(obj, 'x'))  # True
print(hasattr(obj, 'z'))  # False

# #獲取對象方法或屬性
print(getattr(obj, 'x'))  # 10
# # 能夠設置默認值,值不存在時返回默認值,不然會報錯
print(getattr(obj, 'z', '默認值'))  # 默認值
# # 獲取對象的方法
res = getattr(obj, 'date')  
res()  # 天王蓋地虎,小雞燉蘑菇

# 設置對象方法或屬性
# 此處設置的對象屬性是在對象下面的,不是在類下面
setattr(obj, 'z', 30)
print(hasattr(obj,'z'))  # True
setattr(obj, 'x', 100)
print(getattr(obj, 'x'))  # 100

# 刪除對象屬性或方法,只能刪除對象下的屬性或方法,類裏的無法刪除,全部顯示仍是有x
delattr(obj, 'x')
print(hasattr(obj, 'x')) # True

反射應用get

class File:
    def run(self):
        while True:
            # 讓用戶輸入上傳或下載命令
            user_input = input('請輸入upload上傳或download下載:').strip()
            # 判斷輸入的命令是否存在,並調用相應的方法
            if hasattr(self, user_input):
                func = getattr(self, user_input)
                func()
            else:
                print('輸入有誤')

    def upload(self):
        print('正在上傳...')

    def download(self):
        print('正在下載...')
file_obj = File()
file_obj.run()
相關文章
相關標籤/搜索