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