Python如何从另一个方法内部调用一个方法

时间:2019-11-19 07:43:27

标签: python oop scipy

我是新的OOP。我已经编写了以下类和方法,并希望从另一个方法内部调用一个方法。但是,我收到一条错误消息,说未定义名称多项式(方法)。有什么想法吗?

#Imports
import numpy as np 
from scipy.signal import argrelextrema
from scipy import optimize

class MaxImpact():
    def __init__(self,X,Y):
        self.X = X
        self.Y = Y
        self.minima_index = argrelextrema(self.Y,np.less)
        self.maxima_index = argrelextrema(self.Y,np.greater)
        self.approx_converge_pt = []
        self.approx_converge_idx = []

    # .... (bunch of other methods)

    def calc_convergePt_X(self):
        for i in range(1,len(self.Y)):
            if (self.Y[i-1] < 0 and self.Y[i] > 0) or (self.Y[i-1] > 0 and self.Y[i] < 0):
                self.approx_converge_idx.append(i-1)         

        for i in self.approx_converge_idx:
            self.x_val = self.X[i]
            return(self.x_val)

    def polynomial(self):
        func = clf4.intercept_[0] + clf4.coef_[0][1] * self.X + clf4.coef_[0][2]*np.power(self.X,2) + clf4.coef_[0][3]*np.power(self.X,3) + clf4.coef_[0][4]*np.power(self.X,4)

    def neutral_state(self):
        sol = optimize.root(polynomial(),self.x_val)

maxImp2 = MaxImpact(XX,YY4)
print(maxImp2.calc_convergePt_X())
print(maxImp2.neutral_state())

在这里,我想调用包含中性状态方法内的多项式eq的多项式方法。我最终收到错误消息“未定义名称多项式”

4 个答案:

答案 0 :(得分:2)

必须在实例上调用方法。要在同一实例上调用方法,请使用self来引用它:

def neutral_state(self):
    sol = optimize.root(self.polynomial(), self.x_val)

答案 1 :(得分:1)

调用类成员时,请使用self关键字。

sol = optimize.root(self.polynomial(),self.x_val)

答案 2 :(得分:1)

Python正在引发NameError,因为就其而言,polynomial不存在。您已将其定义为MaxImpact类的方法,因此仅在调用self.polynomial()时才调用该函数,并告诉python它是MaxImpact类的一部分。 / p>

答案 3 :(得分:-2)

要在Python中使用OOP时调用方法,在这种情况下,您只需使用self.methodname()

在您的情况下:

class return_hello():
def polynomial(self):
    return print("hello")

def neutral_state(self):
    self.polynomial()