python全局名称';自我';没有定义
刚开始学习python,我确信这是一个愚蠢的问题,但我正在尝试这样的方法:python全局名称';自我';没有定义,python,variables,self,Python,Variables,Self,刚开始学习python,我确信这是一个愚蠢的问题,但我正在尝试这样的方法: def setavalue(self): self.myname = "harry" def printaname(): print "Name", self.myname def main(): printname() if __name__ == "__main__": main() 我得到的错误
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语句引用不同方法变量的方法,这些代码运行良好
感谢您的帮助
self
是课堂上的自我参考。您的代码不在类中,您只定义了函数。您必须将方法封装在一个类中,如下所示。要使用方法main()
,首先必须实例化类的一个对象并调用该对象上的函数
此外,函数setavalue
应该位于\uuuu init\uuuuuu
中,即实例化对象时调用的方法。您可能应该考虑的下一步是将名称作为参数提供给init,这样您就可以创建name
class;)的任意命名对象
查看an at以获取更多参考。在Python中,self是类的实例方法的第一个参数的常规名称,该参数始终是调用该方法的实例:
class A(object):
def f(self):
print self
a = A()
a.f()
会给你类似的东西
<__main__.A object at 0x02A9ACF0>
类实例中将
self
名称用作实例引用。它仅在类方法定义中使用。不要在函数中使用它
您也不能使用它从其他函数或方法引用局部变量。您只能使用它引用实例或类属性 如果你来自Java这样的语言,也许你可以在
self
和this
之间建立某种联系self
将是对调用该方法的对象的引用,但您需要首先声明一个类。尝试:
class MyClass(object)
def __init__(self)
#equivalent of constructor, can do initialisation and stuff
def setavalue(self):
self.myname = "harry"
def printaname(self):
print "Name", self.myname
def main():
#Now since you have self as parameter you need to create an object and then call the method for that object.
my_obj = MyClass()
my_obj.setavalue() #now my_obj is passed automatically as the self parameter in your method declaration
my_obj.printname()
if __name__ == "__main__":
main()
您可以尝试一些Python基本教程,如下所示:它应该类似于:
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()
将单独的函数转换为基于类的函数。
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()