Python教程: 反射及常用的幾種方法

python学习者0發表於2024-05-21

反射就是透過字串對映或修改程式執行時的狀態、屬性、方法

有四個常用方法:

  • hasattr(obj,name_str) 判斷一個obj物件是否有對應name_str的方法

  • getattr(obj,name_str) 根據字串name_str獲取Obj物件中對應方法的記憶體地址

  • setattr(obj,key,value) 為物件Obj新增或修改屬性或者方法

  • delattr(obj,name_str) 刪除物件obj中名為name_str的屬性或者方法

反射Demo舉例:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

'''
hasattr(obj,name_str) 判斷一個obj物件是否有對應name_str的方法
getattr(obj,name_str) 根據字串name_str獲取Obj物件中對應方法的記憶體地址
setattr(obj,key,value) 為物件Obj新增或修改屬性或者方法
delattr(obj,name_str) 刪除物件obj中名為name_str的屬性或者方法
'''
def bulk(self):
    print("%s is yelling"%self.name)
 
class Dog(object):
    def __init__(self,name):
        self.name=name
 
    def eat(self,food):
        print("%s is eating %s"%(self.name,food))
 
jim=Dog("Jim")
choise=input(">>輸入需要執行的操作:").strip()
if hasattr(jim,choise):
    func=getattr(jim,choise)
    func("巧克力")
    #delattr(jim,choise)
else:
	#Python學習交流群:153708845
    #動態裝配一個方法 choise為方法名,bulk為方法的記憶體地址
    setattr(jim,choise,bulk)
    # 呼叫時用轉配的方法名,即傳入的choise值,這裡需要傳入物件本身
    getattr(jim,choise)(jim)
    #動態裝配一個屬性,也可以修改屬性
    setattr(jim,choise,"新裝配的屬性")
    print(getattr(jim,choise))
#print(jim.name)
#jim.eat("狗糧")

相關文章