Python-getattr()的使用


getatter()通過方法名字符串調用方法,這個方法最主要的作用就是實現反射機制,也就是說可以通過字符串獲取方法實例,這樣就可以把一個類可能要調用的方法放到配置文件里,需要的時候進行動態加載。

 

1: 可以從類中獲取屬性和函數

新建test.py文件,代碼如下:

# encoding:utf-8
import sys

class GetText():
    def __init__(self):
        pass

    @staticmethod
    def A():
        print("this is a staticmethod function")

    def B(self):
        print("this is a func")
    c = "cc desc"

if __name__ == '__main__':
    print(sys.modules[__name__])  # <module '__main__' from 'D:/腳本項目/lianxi/clazz/test.py'>
    print(GetText)   #  <class '__main__.GetText'>
    # 獲取函數
    print(getattr(GetText, "A"))   # <function GetText.A at 0x00000283C2B75798>
    # 獲取函數返回值
    getattr(GetText, "A")()    # this is a staticmethod function
    getattr(GetText(), "A")()   # this is a staticmethod function

    print(getattr(GetText, "B"))    # <function GetText.B at 0x000001371BF55798>
    # 非靜態方法不可用
    # getattr(GetText, "B")()
    getattr(GetText(), "B")()     # this is a func
    print(getattr(GetText, "c"))  # cc desc
    print(getattr(GetText(), "c"))   # cc desc

 2:從模塊中獲取類(通過類名字符串得到類對象)

新建test1.py,代碼如下:

#encoding:utf-8
import sys
import test
print(sys.modules[__name__])

# 從模塊中獲取類對象
class_name = getattr(test, "GetText")
print(class_name)    #  <class 'test.GetText'>

# 調用類的屬性和函數
print(getattr(class_name, "A"))    # <function GetText.A at 0x000001D637365678>
# 獲取函數返回值
getattr(class_name, "A")()    # this is a staticmethod function
getattr(class_name(), "A")()   # this is a staticmethod function

print(getattr(class_name(), "B"))   # <bound method GetText.B of <test.GetText object at 0x0000022D3B9EE348>>
# getattr(class_name, "B")()   非靜態方法不可用
getattr(class_name(), "B")()    # this is a func

# 獲取屬性值
print(getattr(class_name, "c"))    # cc desc
print(getattr(class_name(), "c"))    # cc desc

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM