我試圖調用使用功能相同類型的類的列表的功能列表上。我想這樣做,因爲我必須遍歷幾個對象並對它們進行相同的操作,並且我有幾個不同的函數運行這樣的for
循環。傳遞一個類的函數作爲參數調用它的類
有鑑於此:
def make_timeSeries(symbol):
return pandas.DataFrame(symbol) # Pseudo-code; But the return value is a pd.DataFrame Object nonetheless.
Class TimeSeries:
def __init__(self, symbol):
self.series = make_timeSeries(symbol)
def get_y_of_day(self, day, _type):
# Returns a y value for a given X (date) value from a timeline.
if isinstance(day, str):
day = funcs.convert_str_to_datetime(day)
return self.series[(self.series['Date'] >= day) &
(self.series['Type'] ==
_type)].head(1)['Value'].values[0]
Class Market:
def __init__(self, symbols):
self.instruments = {}
for symbol in symbols:
self.instruments[symbol] = TimeSeries(make_timeSeries(symbol))
def _market_day_apply_funcs(self, func, func_list=None, *args):
# calls a given class function of TimeSeries for each TimeSeries stored in self.instruments
ys = []
for symbol in self.instruments:
ys.append(self.instruments[symbol].func(args))
if func_list is None:
return ys
else:
return func_list(ys)
def market_ys_of_day(self, day, _type):
# Masking function, returns a list of all instruments at the given X (Date) value.
return self._market_day_apply_funcs(get_y_of_day, day, _type)
我打電話它的計算方式如下:
print(market.market_ys_of_day('2016-2-1', 'vola'))
然而這引起了NameError
:
Traceback (most recent call last):
File "/markets.py", line 73, in <module>
print(market.market_ys_of_day('2016-2-1', 'vola'))
File "/markets.py", line 38, in market_ys_of_day
return self._market_day_apply_funcs(get_y_of_day, day, _type)
NameError: name 'get_y_of_day' is not defined
我假設的方式解決這個錯誤將是通過self.instruments[symbol].func
的整體,但這將失敗的目的的函數本身,這是在每個market_day_*
函數中沒有重複的for
循環。
任何人都知道這個解決方案嗎?
編輯 它可能感興趣地指出我的IDE凸顯func
參數作爲函數的範圍不使用。如果任何人都可以解釋這一點,那麼額外的信用。
Tr的y'TimeSeries.get_y_of_day' – cdarke
@cdarke我相信這是行不通的,因爲該方法使用類的實例變量。我相信你首先需要創建一個TimeSeries對象並通過它。 – Luke
你在哪裏實際生成'market'的實例? – roadrunner66