しょっちゅう忘れることを書いておく。
![]() |
66 |
564 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.monitorconditionsを取得し、ループさせる場合は4行目のようにmc.monitorconditions.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 69.
すぺぺぺ
本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。
https://www.osumoi-stdio.com/novel/