刚开始学习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语句引用我读过的一些代码中不同方法的变量的方法。
感谢您的帮助
答案 0 :(得分:29)
self
是Class中的自引用。您的代码不在类中,您只定义了函数。你必须将你的方法包装在一个类中,如下所示。要使用方法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()
请查看Classes chapter of the Python tutorial和Dive into Python以获取进一步的参考资料。
答案 1 :(得分:3)
在Python中self
是给出类的实例方法的第一个参数的常规名称,它始终是调用该方法的实例:
class A(object):
def f(self):
print self
a = A()
a.f()
会给你类似的东西
<__main__.A object at 0x02A9ACF0>
答案 2 :(得分:2)
应该是这样的:
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()
答案 3 :(得分:1)
如果您来自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基础教程,例如:Python guide
答案 4 :(得分:0)
self
名称用作类实例中的实例引用。它仅用于类方法定义。不要在功能中使用它。
您也无法使用其他函数或方法引用局部变量。您只能使用它引用实例或类属性。