13章クリア?
13章をとりあえず終える。
なんじゃこりゃと思っていた def [](index)は色々調べた結果、
配列参照演算子ということだった。
(参考) http://jutememo.blogspot.jp/2008/09/python_07.html
これはPythonでは def __getitem__(self, key)にあたる。
そしてincludeされていた Enumerableは、
ちょうどPythonで作られていた方がいたので、
使うのかまだわからないがそれをそのまま多重継承してMixinしておいた。
(参考) http://www.geocities.jp/m_hiroi/light/python06.html
できた結果がこちら。
#!/usr/bin/env python # -*- coding: utf-8 -*- from myarray import Array class Enumerable: # 探索 def member(self, func): for x in self.each(): if func(x): return x return False # 位置を返す def position(self, func): n = 0 for x in self.each(): if func(x): return n n += 1 return -1 # 個数を数える def count(self, func): n = 0 for x in self.each(): if func(x): n += 1 return n # マップ def map(self, func): a = [] for x in self.each(): a.append(func(x)) return a # フィルター def filter(self, func): a = [] for x in self.each(): if func(x): a.append(x) return a # 畳み込み def fold(self, func, init): a = init for x in self.each(): a = func(a, x) return a # テクニカル指標の親クラス class Indicator(Array, Enumerable): def __init__(self, stock): Array.__init__(self, stock) self.stock = stock def each(self): return [value for value in self] def calculate(self): self.indicator = self.calculate_indicator() return self.indicator def __getitem__(self, index): if isinstance(index, int) != True or index < 0: raise ValueError('no_value') else: for i, e in enumerate(self): if i == index: if e == None: raise ValueError('no_value') else: return e def calculate_indicator(self): pass if __name__ == '__main__': class MyIndicator(Indicator): def calculate_indicator(self): return Indicator([None, None, 3, 5, 8, 4]) my_indicator = MyIndicator([]).calculate() print(my_indicator) for ind in my_indicator.each(): print(ind) #print(my_indicator[0]) print(my_indicator[2]) print(my_indicator[3]) try: print(my_indicator[0]) except: print('TestError') for i in range(0, len(my_indicator)): try: print(my_indicator[i]) except: print('TestError')
微妙に動作が違うような気がするがいいことにしよう。