【发布时间】:2017-11-26 15:20:27
【问题描述】:
下面是我做的一个简单的类。我想访问像
这样的内部函数obj = TestClass().TestClass(data)
obj.preprocess.gradient()
很明显,这样的调用不会起作用,因为preprocess 是一个函数。我怎样才能达到我想要的(我希望你清楚)
编辑:这是一个简化的案例。我希望其他不熟悉机器学习的用户发现以正确的顺序应用正确的功能更容易(首先是预处理,然后是例如聚类,然后是绘图)。我刚刚删除了外部功能(预处理等),它工作正常。我仍然想知道这种方法是否合理。
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吗?此外,我认为提出问题会对我们有所帮助。 -
这是您要解决的问题的代表,还是只是简化了问题?因为如果这个方法单独存在以便它可以定义其他函数,那么有更好的方法来实现这一点。
-
gradient不是preprocess的返回值的属性;它只是preprocess范围内的一个局部变量。preprocess需要返回具有gradient属性的内容。或者,preprocess需要是简单的实例属性,而不是实例方法。 -
“很明显,这样的调用不会起作用,因为预处理是一个函数”。很不真实。函数是 Python 中的第一类对象,并且通常具有类似定义的属性(参见 numpy funcs 以获得一个流行的示例)。符号失败的原因是内部函数不是父命名空间中的任何其他瞬态对象的属性。
-
对我的回答不满意?它按照你的要求做。也许有些精度?
标签: python