self. | NameError: name 'self' is not defined or NameError: name 'foo' is not defined

self. | NameError: name 'self' is not defined or NameError: name 'foo' is not defined

我经常在 Python 遇到这个面向对象的编程问题,我似乎总是让这两种方法都失败。我在其他语言的 OOP 方面有丰富的经验,但现在才在 Python.

中使用它

我想调用 __init__(self) 中声明的变量。

标准方法是/应该是什么?


调用self.foo:

class MyClass:
    def __init__(self):
        self.foo = 'value'

    def process():
        print(self.foo)  # !

test = MyClass()

回溯:

NameError: name 'self' is not defined

正在调用foo:

class MyClass:
    def __init__(self):
        self.foo = 'value'  # `self.` kept here

    def process():
        print(foo)  # !

test = MyClass()

回溯:

NameError: name 'foo' is not defined

两者都不是 - 你想要:

class MyClass:
    def __init__(self):
        self.foo = 'value'

    def process(self):
        print(self.foo)  # !

test = MyClass()
test.process()

所有方法都需要 self 作为参数。

您需要在每个方法中传递 self 参数(在 class 中定义时):

class MyClass:
    def __init__(self):
        self.foo = 'value'

    def process():
        print(self.foo)  # `self` is not defined,
                         # you need to give it as argument

更正代码:

class MyClass:
    def __init__(self):
        self.foo = 'value'

    def process(self):
        print(self.foo)

有人发表评论说:

def process(self)

其中 self. 需要添加到使用任何 self. var/obj 的 class 方法。