class Person: country = "China" def eat(self): print("-----eat-----") obj = Person() print(getattr(Person, "country")) # China # 類名.方法名(對象):方法調用的另外一種方式 getattr(Person, "eat")(obj) # -----eat----- getattr(obj, "eat") # -----eat-----
class Person: country = "China" def eat(self): print("-----eat-----") obj = Person() print(hasattr(Person, "country")) # True print(hasattr(obj, "run")) # False
class Person: country = "China" def eat(self): print("-----eat-----")
obj = Person() setattr(Person, "eat", 3) # 此時內存中函數eat變爲eat = 3 obj.eat() # 報錯
class Person: country = "China" def eat(self): print("-----eat-----") obj = Person() delattr(Person, "eat") obj.eat() # 'Person' object has no attribute 'eat'
注:以上四個函數都是對加載到內存中的代碼進行操做的,並不會影響源代碼函數
1)對於屬性:測試
getattr(類名,屬性(字符串形式)) ----->類.屬性spa
getattr(對象,屬性(字符串形式)) ----->對象.屬性code
setattr(類名,屬性(字符串形式),值) ----->修改類屬性的值對象
2)對於實例方法:blog
場景:若是已知py文件有哪些方法,但想測試各方法做用,摘一摘本身想用的內容內存
# master.py文件裏內容: def run(): print("-----run-----") def eat(): print("-----eat-----") def drink(): print("-----drink-----")
代碼:字符串
import master from types import FunctionType while 1: gn = input("請輸入你要測試的功能:") if hasattr(master, gn): # 若是master裏面有你要的功能 # 獲取這個功能,並執行 attr = getattr(master, gn) # 判斷是不是函數,只有函數才能夠被調用 if isinstance(attr, FunctionType): attr() else: # 若是不是函數, 就打印 print(attr)