为什么我不能在创建实例之前调用某些 类 的方法?理解逻辑

Why I can't call methods for certain classes before creating instances? Understanding the logic

我有两个例子可以帮助你理解我的意思

示例 1 有效:

import pandas as pd
import numpy as np
x_grid = np.linspace(-3, 3, 1000)
df = pd.read_excel('somefile.xlsx').dropna()

我在创建 DataFrame 对象的实例时调用了方法 dropna()。

示例 2 不起作用:

from statsmodels.nonparametric.kde import KDEUnivariate
kde = KDEUnivariate(df).fit().evaluate(x_grid)

为了让它工作,我需要先像这样创建 Class 的实例:

kde = KDEUnivariate(df)

然后一次调用一个方法

kde.fit()
grid = kde.evaluate(x_grid)

这背后的逻辑是什么? 感谢您的帮助!

当您尝试这样做时:

import pandas as pd
import numpy as np
x_grid = np.linspace(-3, 3, 1000)
df = pd.read_excel('somefile.xlsx').dropna()

from statsmodels.nonparametric.kde import KDEUnivariate
kde = KDEUnivariate(df).fit().evaluate(x_grid)

那么你实际上传递了fit()方法的return值,也就是'NoneType'.

如果你这样做也是一样的:

kde = KDEUnivariate(df)
kde = kde.fit()

grid = kde.evaluate(x_grid)

但你不想要这个。

你想要一个实例化,然后拟合KDEUnivariate()对象。 然后对其进行评估。

这就是为什么调用机制的适当方式如下:

kde = KDEUnivariate(df)
kde.fit()

grid = kde.evaluate(x_grid)

在这种情况下,KDEUnivariate() instanceevaluate() 方法适用于 KDEUnivariate() instance 本身,以及它的拟合参数,not return value of KDEUnivariate() instance fit() 方法。