以下は私が作成したシンプルなクラスです。私はpreprocess
が関数であるので、このような呼び出しが動作しないことが明らかであるpythonクラス:内部関数;ネストされた点を介してアクセスします
obj = TestClass().TestClass(data)
obj.preprocess.gradient()
のような内部機能にアクセスしたいと思います。どのように私が望むものを達成することができますか(私はあなたにはそれがはっきりしていることを望みます)
編集:これは単純なケースです。私は、機械学習に参加していない他のユーザーが、適切な関数を正しい順序で適用する方が簡単であることを願っています(最初は前処理、次にクラスタリング、その後のプロット)。私はちょうどそれがうまく動作する外部関数(前処理など)を削除しました。しかし、私はそのようなアプローチが合理的かもしれないと思う。
import numpy as np
from sklearn.preprocessing import StandardScaler
class TestClass:
def __init__(self, data):
self.data = data
self._preprocessed = data
# should not be a function but rather a "chapter" which
# separates preprocessing from analysis method
def preprocessing(self):
def gradient(self):
self._preprocessed = np.gradient(self._preprocessed, 2)[1]
def normalize(self):
self._preprocessed = StandardScaler().fit_transform(self._preprocessed)
def cluster_analysis(self):
def pca(self):
pass
私はあなたが 'obj = TestClass(data)'を意味すると思いますか?また、 'preprocess'メソッドはどこから来たのですか?代わりに' preprocessing'を意味しませんか?さらに、質問を定式化することが私たちを助けると思う。 – Kanak
この問題の代表者は、あなたが解決しようとしている問題、または単純化した問題の代表者ですか?なぜなら、このメソッドが他の関数を定義できるだけであれば、これを実現するより良い方法があるからです。 – Reti43
'gradient'は' preprocess'の戻り値の属性ではありません。 'preprocess'のスコープ内のローカル変数にすぎません。 'preprocess'は' gradient'属性を持つものを返す必要があります。あるいは、 'preprocess'はインスタンスメソッドではなく、単純なインスタンス属性である必要があります。 – chepner