我试图弄清楚为什么'v3'不起作用并引发属性错误。是什么让v1和v2工作而不是v3?代码简短且可重复,我认为它也很简单,不需要解释,但如果有任何不清楚的地方请告诉我。
import numpy as np
import pandas as pd
class Example(object):
def __init__(self, ts_df):
self.all_df = ts_df
def simple_av(self, lookback=""):
self.agg = self.all_df.mean(axis=1)
class Example_two(object):
def __init__(self, ts_df, method):
self.ts = ts_df
self.method = method
def apply_method(self, **kwargs):
self.output = self.method(self.ts, **kwargs)
ts = pd.DataFrame(np.random.rand(100,2))
'''v1'''
ex = Example(ts)
ex.simple_av()
print (ex.agg.head())
'''v2'''
func = pd.rolling_mean
ex = Example_two( ts, func)
req_args = dict({'window': 3})
ex.apply_method(**req_args)
print (ex.output.head())
'''v3'''
func = Example.simple_av
ex= Example(ts)
ex.func()
答案 0 :(得分:2)
第三个示例失败,因为func
存在但ex.func
没有。 ex.func
在"func"
类的属性中查找Example
并失败。
你可以用程序样式调用func
,将ex
作为第一个参数传递:
func(ex)
相当于:
ex.simple_av()
(前两个例子使用对已定义方法的调用,因此它可以工作)