python全局名称'self'未定义

har*_*rry 15 python variables self

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

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

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

    def main():
        printname()




    if __name__ == "__main__":
        main() 
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

 NameError: global name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)

我看到这种使用self语句引用一些代码中不同方法的变量的方法,我读到它正常工作.

谢谢您的帮助

Jac*_*cob 31

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() 
Run Code Online (Sandbox Code Playgroud)

Dive into Python中查看Python教程Classes章节以获得进一步的参考.


Nic*_*tti 5

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

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

a = A()
a.f()
Run Code Online (Sandbox Code Playgroud)

会给你类似的东西

<__main__.A object at 0x02A9ACF0>
Run Code Online (Sandbox Code Playgroud)