我有一些简单的代码来查找2个元素的总和。 (假设列表中存在总和)
class Solution(object):
def twoSum(self, nums, target):
compliment = []
for ind, item in enumerate(nums):
print(ind)
if item in compliment:
return [nums.index(target - item), ind]
compliment.append(target - item)
return [0, 0]
if __name__ == "__main__":
result = Solution()
final = result.twoSum([3, 3], 6)
#Why does this not work without removing the self parameter??
#final = Solution.twoSum([3, 3], 6)
print(str(final))
我正在尝试学习如何在Python中最好地实例化一个对象。在我的主要函数中,我想通过在1行而不是2行中进行简化。您可以看到我在此类中两次尝试调用该函数。第二次失败,除非我从函数参数中删除self参数。这是因为我试图传递2个参数而不是3个参数。
无论如何,我很困惑为什么我的两个实现不同,为什么一个可行而另一个却不可行。我也不确定在这里我什至不需要自我。似乎在拥有__init__
并为类定义变量时,经常使用self。既然我不在这里,我什至根本不需要它吗?
答案 0 :(得分:1)
self
参数仅对于实例方法是必需的(并且仅适用于实例方法)。实例方法也是默认类型。要在没有实例且没有self
参数的情况下使用它,请将其装饰为staticmethod
:
class Solution(object):
@staticmethod
def twoSum(nums, target):
compliment = []
for ind, item in enumerate(nums):
print(ind)
if item in compliment:
return [nums.index(target - item), ind]
compliment.append(target - item)
return [0, 0]
if __name__ == "__main__":
final = Solution.twoSum([3, 3], 6)
print(str(final))
答案 1 :(得分:0)
您可以选择使用Python中的静态方法或类方法来装饰函数。对于类方法,您需要在方法签名中使用cls
。这是一个很好的讨论,以区分两者:
What is the difference between @staticmethod and @classmethod?
顺便说一句—对于您的代码,我会高度建议使用集合而不是数组。这将使您的代码更加高效。检查目标值是否已经在集合中看到是平均的恒定时间操作。