关于类,对象和方法python的混淆

时间:2017-12-12 22:28:57

标签: python class oop object attributes

我试图弄清楚为什么'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()

1 个答案:

答案 0 :(得分:2)

第三个示例失败,因为func存在但ex.func没有。 ex.func"func"类的属性中查找Example并失败。

你可以用程序样式调用func,将ex作为第一个参数传递:

func(ex)

相当于:

ex.simple_av()

(前两个例子使用对已定义方法的调用,因此它可以工作)