2017-12-12 6 views
1

私は以下の 'v3'が動作しなくなり、属性エラーが発生する理由を理解しようとしています。 v1とv2はv3ではなく動作するのはなぜですか?コードは短く再現性があり、説明が必要ないほどシンプルであると思うが、明らかでないものがあれば教えてくれる。クラス、オブジェクト、メソッドについての混乱python

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() 

答えて

2

funcが存在するが、ex.funcないので、第3の例は失敗します。 ex.funcExampleクラスの属性で"func"を検索して失敗します。等価である

func(ex) 

あなたが最初の引数としてexを渡し、手続き型のスタイルでfuncを呼び出すことができ

ex.simple_av() 

(2つの最初の例では、定義されたメソッドの呼び出しを使用して、それは動作します)

関連する問題