Почему я не могу вызывать методы для определенных классов перед созданием экземпляров? Понимание логики - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть два примера, которые помогут вам понять, что я имею в виду

Пример1 работ:

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

Я вызвал метод dropna () для экземпляра объекта DataFrame при его создании.

Example2 не работает:

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

Чтобы это заработало, мне нужно сначала создать экземпляр класса, например:

kde = KDEUnivariate(df)

А затем вызывать методы по одному

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

Какая логика стоит за этим? Спасибо за любую помощь!

1 Ответ

0 голосов
/ 05 ноября 2018

При попытке сделать:

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 (), который равен 'NoneType'.

То же самое, если вы сделали это:

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

grid = kde.evaluate(x_grid)

Но ты не хочешь этого.

Вы хотите создать экземпляр , затем приспособленный KDEUnivariate() объект. Тогда оцените это.

Вот почему соответствующий способ вызова механизма выглядит следующим образом:

kde = KDEUnivariate(df)
kde.fit()

grid = kde.evaluate(x_grid)

В этой ситуации метод KDEUnivariate() экземпляр * evaluate() работает с самим KDEUnivariate() экземпляром и с его соответствующими параметрами, не возвращаемое значение из KDEUnivariate() экземпляр fit() метод.

...