You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调用类方法?调用Linter.lint()遇TypeError报错求助

问题解决:类实例方法调用错误

错误原因

你碰到的TypeError是因为lint是实例方法,必须先创建Linter类的实例,再通过实例调用这个方法。直接用类名Linter调用时,Python无法自动传入实例参数self,所以会提示缺少text参数(实际是缺少self,但因为你传了一个参数,Python误以为你漏了text)。你尝试的Linter.lint(self, '{[()]}')也无效,因为self是实例对象,此时还没创建实例,self根本不存在。

修复方法

先创建Linter的实例,再用实例调用lint方法:

修正后的完整代码

class Stack:

    def __init__(self):
        self.stack = []

    def push(self, element):
        self.stack.append(element)

    def pop(self):
        if len(self.stack) == 0:
            return None
        else:
            return self.stack.pop()

    def read(self):
        if len(self.stack) == 0:
            return None
        else:
            return self.stack[-1]


class Linter:

    def __init__(self):
        self.stack = Stack()

    def lint(self, text):
        for t in text:
            braces = {'(': ')', '[': ']', '{': '}'}

            if t in braces.keys():
                self.stack.push(t)
            elif t in braces.values():
                popped_opening_brace = self.stack.pop()

                if not popped_opening_brace:
                    return f'{t} 没有对应的左括号'

                if t != braces[popped_opening_brace]:
                    return f'{t} 的左括号不匹配'

        if self.stack.read():
            return f'{self.stack.read()} 没有对应的右括号'

        return True


# 先创建实例,再调用方法
linter = Linter()
result = linter.lint('{[()]}')
print(result)  # 输出 True

关键说明

  • 实例方法(比如lint)的第一个参数self是Python自动传入的,代表当前类的实例,必须通过实例调用才能正常工作。
  • 如果非要直接用类调用实例方法,需要手动传入实例对象,比如Linter.lint(Linter(), '{[()]}'),但这种写法不符合Python常规用法,推荐先创建实例再调用。

内容的提问来源于stack exchange,提问作者user572780

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 05:45:35