しょっちゅう忘れることを書いておく。
33 |
300 views
クラスのメンバ変数にself.__conditionsというリストを作成する。
self.__conditionsは9行目のgetterで取得できる。
class MonitorConditions(object):
def __init__(self, monitor_condition: MonitorCondition = None):
self.__conditions = []
if monitor_condition is not None:
if validate_instance(monitor_condition, MonitorCondition):
self.append(monitor_condition)
@property
def conditions(self) -> list[MonitorCondition]:
return self.__conditions
def append(self, monitor_condition: MonitorCondition) -> None:
validate_instance(monitor_condition, MonitorCondition)
self.__conditions.append(monitor_condition)
def __iter__(self):
yield from self.__monitor_conditions
コール元でself.monitor_conditionsを取得し、ループさせる場合は4行目のようにmc.monitor_conditions.conditionsと書き、ループさせる。
if __name__ == '__main__':
mc = MonitorConditions()
for cond in mc.conditions:
print(cond)
これを以下の4行目のようにクラスそのものを指定しても同様の動きをさせるにはどうすれば良いか。
if __name__ == '__main__':
mc = MonitorConditions()
for cond in mc:
print(cond)
正解はクラスに__iter__メソッドを作成して、yieldでself.__conditionsを返却する(16行目~17行目)。
class MonitorConditions(object):
def __init__(self, monitor_condition: MonitorCondition = None):
self.__conditions = []
if monitor_condition is not None:
if validate_instance(monitor_condition, MonitorCondition):
self.append(monitor_condition)
@property
def conditions(self) -> list[MonitorCondition]:
return self.__conditions
def append(self, monitor_condition: MonitorCondition) -> None:
validate_instance(monitor_condition, MonitorCondition)
self.__conditions.append(monitor_condition)
def __iter__(self):
yield from self.__conditions
__iter__は、for文などの繰り返し処理のときに呼ばれるマジックメソッド、yieldは関数を一時停止することができる文。
Page 39 of 56.
マッスル
本サイトの作成者。
趣味:プログラム/水耕栽培/仮想通貨/激辛好き
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
仮想通貨はNEMが好き。
水耕栽培は激辛好きが高じて、キャロライナ・リーパーの栽培にチャレンジ中。
https://www.osumoi-stdio.com/pyarticle/