我是新的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的多项式方法。我最终收到错误消息“未定义名称多项式”
答案 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()