🎙️
【Python】classmethodからプライベートのメソッドを呼び出したい
概要
Pythonではインタンス化していないクラスから呼び出されるメソッドである、classmethod
の機能があります。classmethodの詳細はPythonのクラスメソッド(@classmethod)とは?使いどころとメソッドとの違いを解説の記事を参照ください。
今回はこのclassmethodからプライベートで設定したメソッドを呼び出す場合、どうすれば良いのかというのをメモ書きします。
対応
classmethodでは自クラスを表すcls
を引数に取ります。このcls
から、プライベートメソッドを呼び出すことが出来ます。プライベートメソッドを呼び出すときは自身(cls)を引数に設定します。
なお、プライベートメソッドの詳細についてはPython のクラスで private メソッドを定義するの記事を参照ください。
実装サンプル
以下のような、東証の市場を表すclassの実装をサンプルとして記します。
classmethodであるmake_market_from_name
からプライベートのメソッド__get_code_from_name
を呼び出しています。
class Market:
__market_dict = {'prime': 'プライム', 'standard': 'スタンダード', 'growth': 'グロース'}
def __init__(self, market_code, market_name):
self.code = market_code
self.name = market_name
@classmethod
def make_market_from_name(cls, market_name):
# プライベートメソッドを呼び出す箇所
market_code = cls.__get_code_from_name(cls, market_name)
return cls(market_code, market_name)
def __get_code_from_name(self, market_name):
market_code = ""
for code, name in self.__market_dict.items():
if market_name.startswith(name):
market_code = code
break
return market_code
Discussion