Python getattr()関数使用方法コード例


getatter()メソッドの名前の文字列の呼び出し方法により、この方法の最も主要な役割は反射機構を実現することであり、つまり文字列を通じて方法の例を取得することができ、このようにして、1つのクラスの呼び出し可能な方法を配置ファイルに置いて、必要な時に動的にロードすることができる。
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:モジュールからクラスを取得する(クラス名文字列でクラスオブジェクトを取得する)
新しいtest 1.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
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。