Python字典调用类内部函数报TypeError,不用lambda如何修复?
报错原因
你定义在类内的add、sub属于实例方法,Python调用这类方法时会自动将实例对象self作为第一个参数传入。你当前的函数定义没有预留self参数位置,最终传入的self实例被当成了运算变量,和整数做加减运算就触发了类型错误。同时你在字典中直接引用add/sub也是错误的,类内的方法需要通过self.前缀访问。
修复方案
方案1:声明为静态方法(更推荐)
静态方法不需要接收self参数,适合这种不需要访问类/实例属性的工具函数,修改后代码如下:
from typing import List class Solution: @staticmethod def add(x) -> int: return x + 1 @staticmethod def sub(x) -> int: return x - 1 def finalValueAfterOperations(self, operations: List[str]) -> int: switch = {"X++": self.add, "++X": self.add, "X--": self.sub, "--X": self.sub} x = 0 for op in operations: x = switch[op](x) return x
方案2:补充self参数
如果不想用静态方法,只要给两个运算函数补上self作为第一个参数即可:
from typing import List class Solution: def add(self, x) -> int: return x + 1 def sub(self, x) -> int: return x - 1 def finalValueAfterOperations(self, operations: List[str]) -> int: switch = {"X++": self.add, "++X": self.add, "X--": self.sub, "--X": self.sub} x = 0 for op in operations: x = switch[op](x) return x
内容的提问来源于stack exchange,提问作者Animesh Srivastava
相关产品推荐
相关产品推荐

