NO IMAGE

【Python】「動的にメソッド実行」したいときはgetattr

NO IMAGE

Contents

初見の関数があらわれた

先日、同僚が書いたpythonコードを拝見していて、以下のような実装を見かけました。

class GroupList: def __init__(self, item, classifier, modifier) -> None: """ 基準に基づいてグループ化されたリストを初期化する Args:  itemグループ化の対象リスト  classifierグループ化の基準  modifier  平均値計算の基準 """  (...)  avg = avg + getattr(employee, modifier)()  (...)

「従業員」オブジェクトの平均年齢を求める処理の一部にあったこのgetattrという関数、初見だったので調べてみました。

getattrとは

getattr()はprint()などと同様、Pythonの組み込み関数のひとつです。以下のような構文で使用します。

getattr([インスタンス], [メソッド名])([引数...])

この関数を使うと、リスト内のメソッドを順番に呼び出すといった処理が効率的に行えます。

class MyClass: def __init__(self):  print("Test of getattr")  def add(self, x, y):  return x + y  def sub(self, x, y):  return x - y  def mult(self, x, y):  return x * y  def divs(self, x, y):  return x / ymyclass = MyClass()x = 6y = 2 calc_list = ['add', 'sub', 'mult', 'divs'] # リスト内のメソッドを順に呼び出しfor calc in calc_list: result = getattr(myclass, calc)(x, y) txt = calc + "の演算結果:" print(txt, result)

(コード参照元:【Python】getattrの使い方

冒頭に示したコード例では、引数でメソッド名を指定し、それを実行するというような処理が行われていました。「動的なメソッド実行」をしたいときに真価を発揮しそうです。

参考リンク

NO IMAGE
最新情報をチェックしよう!