如何调用类方法?调用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
相关产品推荐
相关产品推荐

