Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OO——成员函数定义和关键字self_Python_Oop_Class_Self_Member Functions - Fatal编程技术网

Python OO——成员函数定义和关键字self

Python OO——成员函数定义和关键字self,python,oop,class,self,member-functions,Python,Oop,Class,Self,Member Functions,我正在使用此构造函数编写Python类: #constuctor def __init__(self, initPt_=[1,1],fun_=Optim_tests.peaks,NITER_=30,alpha_=0.7,NMAX_=5000,FTOL_=10**(-10)): self.initPt = initPt_ self.fun = fun_ self.alpha = alpha_ self.ITER = NITER_ self.NMA

我正在使用此构造函数编写Python类:

      #constuctor
def __init__(self, initPt_=[1,1],fun_=Optim_tests.peaks,NITER_=30,alpha_=0.7,NMAX_=5000,FTOL_=10**(-10)):
    self.initPt = initPt_
    self.fun = fun_
    self.alpha = alpha_
    self.ITER = NITER_
    self.NMAX = NMAX_
    self.FTOL = FTOL_
以及定义两个成员函数:

def buildSimplex(self):
    self.simplex=[]
    self.simplex.append([x for x in self.initPt])
    for i in range(len(self.initPt)):
        temp=[x for x in self.initPt]
        temp[i]=self.initPt[i]+1
        self.simplex.append(temp)
    self.npts=len(self.simplex)

def sA(self):
    self.buildSimplex()
调用第二个函数时,会发生错误:

NameError: global name 'buildSimplex' is not defined    

你有线索吗

乍一看,我会说这是一个识别问题,但您需要提供实际代码以获得更具体的答案

我之所以这么说是因为你犯了一个错误。如果您正确地声明了类,并尝试调用未定义的实例的方法,则实际上应该得到一个:
AttributeError:实例没有属性“xxxx”
。如果方法是在类中声明的,则不需要关心定义方法的顺序。请参见下面的
met1
met4
示例

例如:

class A():
   def met1(self):
      print self.met4()

   def met2(self):
      self.met3()

   def met4():
      print 'x'


 a = A()
 a.met1()
 >>> x
 a.met2()
 >>> AttributeError: A instance has no attribute 'met3'

您的错误
name错误:未定义全局名称“buildTool1”
表示您试图访问变量
buildTool1
,但未在本地或全局中定义

请检查这个

class test(object):

    def __init__(self, name):
        self.name = name

    def buildSimplex(self):
        print "CALL"

    def sA(self):
        self.buildSimplex()


if __name__ == '__main__':
    x = test('test')
    x.sA()

您能提供准确的代码吗?添加了缺少的成员变量以保持内聚性。代码详细信息会带来无用的代码复杂性。@dlib这不是真的。这看起来像是一个范围问题(python正在检查函数的全局命名空间),因此发布整个类源代码是合适的。请提供您在其中编写的确切的.py文件。因为没有这一点,我们就无法给出答案。我不相信这个问题在目前的状态下能够得到答案。总之,在你的评论之后,我修改了代码。您对新代码有什么意见吗?这里是您的豁免。请提供产生问题的相同代码。根据您的代码,我们现在无法生成错误。感谢您的评论,尽管给出的问题没有很好地暴露出来。我知道至少在另一个方法中调用self.buildSimplex()和使用关键字self是正确的。如果我进一步测试这个类,我将进行扩展。