ElementUi upload元件list-type:picture-card 編輯圖片回顯問題解決
阿新 • • 發佈:2020-10-26
反射
反射指的是通過 ”字串“ 對物件的屬性或方法進行操作。
反射的方法有:
hasattr:通過 ”字串“ 判斷物件的屬性或方法是否存在
getattr:通過 ”字串“ 獲取物件的屬性值或方法
setattr:通過 ”字串“ 設定物件的屬性值
delattr:通過 ”字串“ 刪除物件的屬性或方法
注意:反射的四個方法都是python內建
1、hasattr
通過 ”字串“ 判斷物件的屬性或方法是否存在
class Foo: def __init__(self, x, y, z): self.x = x self.y= y self.z = z def func(self): pass foo_obj = Foo(10, 20, 30)
# hasattr:通過字串 "x"、"y"、"z" 判斷物件中是否存在屬性 print(hasattr(foo_obj, "x")) print(hasattr(foo_obj, "y")) print(hasattr(foo_obj, "z")) # hasattr:通過字串 "func" 判斷物件中是否存在該方法 print(hasattr(foo_obj, "func"))
執行結果:
True True True True
2、getattr
通過 ”字串“ 獲取物件的屬性值或方法
class Foo: def __init__(self, x, y, z): self.x = x self.y = y self.z = z def func(self): pass foo_obj = Foo(10, 20, 30)
# getattr:通過字串 "x"、"y"、"z" 來獲取物件屬性 print(getattr(foo_obj, "x")) print(getattr(foo_obj, "y")) print(getattr(foo_obj, "z")) # getattr:通過字串 "func" 來獲取物件的繫結方法 print(getattr(foo_obj, "func")) # 若該屬性不存在,則返回 "不存在,預設值" print(getattr(foo_obj, "a", "不存在,預設值"))
執行結果:
10 20 30 <bound method Foo.func of <__main__.Foo object at 0x00000000021B6508>> 不存在,預設值
3、setattr
通過 ”字串“ 設定物件的屬性值;若該屬性不存在,即新增 ,若存在,即修改
class Foo: def __init__(self, x, y, z): self.x = x self.y = y self.z = z def func(self): pass foo_obj = Foo(10, 20, 30) # setattr:通過字串 "x" 設定(修改)物件的屬性值 print(getattr(foo_obj, "x")) setattr(foo_obj, "x", 100) print(getattr(foo_obj, "x")) # 若不存在該屬性,即新增該屬性 setattr(foo_obj, "a", 200) print(getattr(foo_obj, "a"))
執行結果:
10 100 200
4、delattr
通過 ”字串“ 刪除物件的屬性或方法
class Foo: def __init__(self, x, y, z): self.x = x self.y = y self.z = z def func(self): pass foo_obj = Foo(10, 20, 30) # delattr:通過字串 "x" 刪除物件的屬性或方法 print(hasattr(foo_obj, "x")) delattr(foo_obj, "x") print(hasattr(foo_obj, "x"))
執行結果:
True
False
5、反射的應用場景
場景:用於校驗使用者輸入
class FileControl: def run(self): while True: # 讓使用者輸入上傳或下載功能的命令 user_input = input('請輸入上傳(upload)或下載(download)功能, 輸入"quit"退出>>> ').strip() # 通過使用者的字串,呼叫相應的方法 if hasattr(self, user_input): func = getattr(self, user_input) # func --> upload , func --> download func() elif user_input == "quit": break else: print("輸入有誤...") def upload(self): print("檔案正在上傳...") def download(self): print("檔案正在下載...") file_obj = FileControl() file_obj.run()
執行結果:
請輸入上傳(upload)或下載(download)功能, 輸入"quit"退出>>> upload 檔案正在上傳... 請輸入上傳(upload)或下載(download)功能, 輸入"quit"退出>>> download 檔案正在下載... 請輸入上傳(upload)或下載(download)功能, 輸入"quit"退出>>> quit