我有以下class参数,该参数应返回“ nums”列表中2个数字的索引,这些数字加总到目标。
当我尝试通过编写'Solution(nums,9)'将9作为目标来测试类时,Python返回了'TypeError:object()不带参数'错误。谁能告诉我我在脚本中做错了什么?
nums = [2, 7, 11, 15]
class Solution(object):
def twoSum(self, nums, target):
nums_1 = nums
for i in range(len(nums)):
for a in range(len(nums_1)):
if i != a:
if nums[i] + nums_1[a] == target:
return(sorted([i, a]))
Solution(nums,9)
Traceback (most recent call last):
TypeError: object() takes no parameters
答案 0 :(得分:2)
您不能那样使用它,因为您的类具有默认的__init __(由于您未定义它,因此该类在默认情况下会得到它),并且除非您定义要接受的参数,否则它不会接受任何参数
使用以下内容:
sol = Solution()
sorted_stuff = sol.twoSum(nums, 9)
print(sorted_stuff)
答案 1 :(得分:1)
在定义 Solution 类时,您错过了__init__()
方法。它并不总是强制性的,但是由于您是通过使用一些参数调用Solution()
来创建类的实例的,因此必须实现__init__
方法。因此实现可以是:
_nums = [2, 7, 11, 15]
class Solution(object):
def __init(nums, target):
self.nums = nums
self.target = target
def twoSum(self, nums=None, target=None):
if not nums:
nums = self.nums
if not target:
target= self.target
nums_1 = nums
for i in range(len(nums)):
for a in range(len(nums_1)):
if i != a:
if nums[i] + nums_1[a] == target:
return(sorted([i, a]))
s = Solution(_nums,9)
s.twoSum()
您也可以这样做:
s = Solution()
s.twoSum(_nums,9)
这使您可以自由地在类初始化期间定义args或使用args调用实际方法。