Solution类继承自对象类,发生TypeError:'Solution'对象不支持索引?但是如果Solution类不从对象继承,则代码可以找到。我的问题是为什么Solution类在从object继承时不支持索引,即使它覆盖 getitem 方法。
class Solution(object):
def findMin(self, nums):
self.__getitem__ = lambda i: nums[i] <= nums[-1]
return nums[bisect.bisect(self, False, 0, len(nums))]
答案 0 :(得分:3)
当您从object
继承时,您将创建一个新样式类而不是旧样式类。对于新式类,__getitem__
在类上查找,而不是在类的实例上查找。即使您已将__getitem__
方法添加到类实例(self
),您也无法将该方法添加到类中,因此也无法查找失败(对于新的样式类)。
对于旧样式类,大概是查找仍然在实例上发生,这就是为什么代码在您不从object
继承时起作用的原因。但是要小心 - 在python3.x中,无论是否明确地从object
继承,所有类都是新风格。
答案 1 :(得分:0)
你需要这样做:
import bisect
class Solution(object):
__getitem__ = lambda self, i: self.nums[i] <= self.nums[-1]
def findMin(self, nums):
self.nums = nums
return nums[bisect.bisect(self, False, 0, len(nums))]
sol = Solution()
sol.findMin([42, 1, 13])
__getitem__
需要在类中定义,而不是在新样式的类中定义(Python 2中基类为object
的类,以及Python 3中的所有类 - 是否明确指定与否。)