hasattr(x, y) getattr(x, y) setattr(x, y , v) delattr(x, y)四種反射方法,就是把字元串反射為記憶體地址。 ...
hasattr(x, y) getattr(x, y) setattr(x, y , v) delattr(x, y)四種反射方法,就是把字元串反射為記憶體地址。
1 class people(object): 2 def __init__(self, name, age): 3 self.name = name 4 self.age = age 5 6 def talk(self): 7 print('%s is talking ...'%self.name) 8 p1 = people('zsq', 28) 9 choice = input('please inpute choice') 10 11 #hasattr當前對象中有對應該字元串名的方法或屬性返回True否則返回False.# choice輸入name/age/talk都會返回True否則返回False 12 if choice in ('name', 'age', 'talk'): 13 print(hasattr(p1, choice)) 14 else: 15 print('this choice not in hasattr') 16 17 #getattr方法返回該對象對應字元串參數方法的記憶體地址,加()就可以執行。# 如果字元串是對象的屬性則直接返回屬性值。 18 if choice in ( 'talk', ): 19 getattr(p1, choice)() 20 elif choice in ('name', 'age'): 21 a = getattr(p1, choice) 22 print(a) 23 24 #setattr(x, 'y', v) setattr命令以後調用對象的choice方法時,直接調用test_setattr函數;不論對象是否原來有該方法 25 #setattr命令以後調用對象的choice屬性時時,直接返回v的記憶體地址(對象)或者值(常量) 26 def test_setattr(): 27 print('this is test setattr') 28 29 if choice == 'talk1': 30 setattr(p1, choice, test_setattr) 31 p1.talk() 32 elif choice == 'name1': 33 setattr(p1, choice, 'name_test') 34 print(getattr(p1, choice)) 35 #delattr 刪除對象對應的屬性或者方法 36 if choice == 'age': 37 delattr(p1, choice) 38 print(p1.age)