一个函数如何调用同一个类中的另一个函数?如何修复未解决的参考错误?

Sup*_*rio 1 python python-3.x

我想创建一个包含两个函数的类,其中一个函数调用另一个函数,例如:

class Parser:

    def foo(a):
        return a
 
    def bar(b):
        return foo(b * 2)
Run Code Online (Sandbox Code Playgroud)

这会出错:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in bar
NameError: name 'foo' is not defined
Run Code Online (Sandbox Code Playgroud)

Sha*_*ayn 6

@staticmethod如果您希望它们成为实例方法,您要么忘记将方法设置为静态方法,要么忘记将 self 作为参数之一。

对于静态方法,您需要将类更改为以下内容:

class Parser:
    @staticmethod
    def foo(a):
        return a

    @staticmethod
    def bar(a):
        return Parser.foo(a)
Run Code Online (Sandbox Code Playgroud)

我还将类名更改为大写驼峰以遵循典型样式。

这将允许您在没有实例的情况下调用函数,例如print(Parser.bar('test'))将 print test

或者,如果您希望方法成为实例方法:

class Parser:

    def __init__(self):
        pass

    def foo(self, a):
           return a

    def bar(self, a):
           return self.bar(a)
Run Code Online (Sandbox Code Playgroud)

然后,您必须创建解析器的实例并在此实例上调用 bar,例如:

parser = Parser()
print(parser.bar('test'))
Run Code Online (Sandbox Code Playgroud)

  • +1 用于列出“静态”和“实例”方式,尽管我很确定后者是 OP 想要的。最重要的是,可以使`staticmethod` foo2 成为`classmethod`,从而避免显式引用`Parser`。 (3认同)