未定义python全局名称“self”

2024-06-23 18:46:40 发布

您现在位置:Python中文网/ 问答频道 /正文

刚开始学习python,我确信这是个愚蠢的问题,但我正在尝试这样的方法:

    def setavalue(self):
        self.myname = "harry"

    def printaname():
        print "Name", self.myname     

    def main():
        printname()




    if __name__ == "__main__":
        main() 

我得到的错误是:

 NameError: global name 'self' is not defined

我看到了这种使用self语句引用不同方法的变量的方法,在我读到的一些代码中,这种方法运行良好。

谢谢你的帮助


Tags: 方法nameselfifmaindef错误print
3条回答

在Python中,self是类的实例方法的第一个参数的常规名称,它始终是调用该方法的实例:

class A(object):
  def f(self):
    print self

a = A()
a.f()

会给你一些

<__main__.A object at 0x02A9ACF0>

self是类中的自引用。您的代码不在类中,您只定义了函数。您必须将方法包装到类中,如下所示。要使用方法main(),首先必须实例化类的对象并对该对象调用函数。

此外,函数setavalue应该在__init___中,这是实例化对象时调用的方法。下一步您可能应该考虑的是将名称作为参数提供给init,这样您就可以创建Name类的任意命名的对象;)

class Name:
    def __init__(self):
        self.myname = "harry"

    def printaname(self):
        print "Name", self.myname     

    def main(self):
        self.printaname()

if __name__ == "__main__":
    objName = Name()
    objName.main() 

请查看位于Dive into PythonClasses chapter of the Python tutorial和,以获取进一步的参考。

应该是这样的:

class Person:
   def setavalue(self, name):         
      self.myname = name      
   def printaname(self):         
      print "Name", self.myname           

def main():
   p = Person()
   p.setavalue("harry")
   p.printaname()  

相关问题 更多 >

    热门问题