Python错误“name 'self' is not defined”的含义是什么?

4

我搞不清楚这个非常简单的代码片段有什么问题:

class A(object):
        def printme(self):
                print "A"

        self.printme()

a = A()

错误输出:

 Traceback (most recent call last):   File "prog.py", line 1, in
 <module>
     class A(object):   File "prog.py", line 5, in A
     self.printme() NameError: name 'self' is not defined

4个回答

14

以下内容应该能够解释问题。也许你会想要尝试这个?

class A(object):
    def printme(self):
        print "A"
a = A()
a.printme()

在显式声明名为self的参数的方法内,才定义了名称为self的变量。它在类范围内是未定义的。

类范围只在类定义时执行一次。通过A()来"调用"该类实际上是调用其构造函数__init__()。所以也许你真正想要的是这个:

class A(object):
    def __init__(self):
        self.printme()
    def printme(self):
        print "A"
a = A()

Sven- 我知道那个方法可行,但我想做的是在类体内访问该方法。self 在类实例内不可调用吗? - Yarin
你为什么要这样做? - Blender
1
@Yarin:你所说的“callable”是什么意思?“within a class instance”又是什么意思?在定义时,类没有实例——甚至还没有定义类,因此不能有实例。 - Sven Marnach
@Sven- 好的,那很有道理 - 我的调用应该在__init__函数体内...今天早上有点生疏。 - Yarin

3
如果你希望每次创建类的实例时都运行该函数,请尝试以下方法:

class A(object):
    def __init__(self):
        self.printme()

    def printme(self):
        print "A"

a = A()

谢谢,这正是我在寻找的内容。Sven只是比我先到达了那里。 - Yarin

2
这是一个关于IT技术的翻译内容:

正如它所说的那样:self在调用self.printme()时未定义。self在Python中并没有神奇的定义方式;它仅在具有名为self的参数的方法内部起作用。如果有帮助的话,可以尝试在整个程序中将单词self替换为其他东西,比如foo(因为实际上,self作为标识符并没有什么特别之处)。


你仍然需要在__init__中定义self作为一个参数。 - Thomas Orozco
Thomas- 是的,我刚刚弄明白了- 已经删除了那条评论- 谢谢。 - Yarin

1
如果你想在实例化对象时打印一些内容,请使用以下代码:
class A(object):
    def __init__(self):
            self.printme()

    def printme(self):
            print "A"

a = A()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接