我在这里看到了一些关于我的错误的答案,但它没有帮助我。我是python上的一个绝对的菜鸟,并且刚刚在9月开始做这个代码。无论如何看看我的代码
class SimpleCounter():
def __init__(self, startValue, firstValue):
firstValue = startValue
self.count = startValue
def click(self):
self.count += 1
def getCount(self):
return self.count
def __str__(self):
return 'The count is %d ' % (self.count)
def reset(self):
self.count += firstValue
a = SimpleCounter(5)
这是我得到的错误
Traceback (most recent call last):
File "C:\Users\Bilal\Downloads\simplecounter.py", line 26, in <module>
a = SimpleCounter(5)
TypeError: __init__() takes exactly 3 arguments (2 given
答案 0 :(得分:10)
__init__()
定义需要2个输入值,startValue
和firstValue
。您只提供了一个值。
def __init__(self, startValue, firstValue):
# Need another param for firstValue
a = SimpleCounter(5)
# Something like
a = SimpleCounter(5, 5)
现在,你是否真的需要2个值是另一回事。 startValue
仅用于设置firstValue
的值,因此您可以重新定义__init__()
仅使用一个:
# No need for startValue
def __init__(self, firstValue):
self.count = firstValue
a = SimpleCounter(5)
答案 1 :(得分:8)
您的__init__()
定义要求 一个startValue
和一个firstValue
。所以你必须通过这两个(即a = SimpleCounter(5, 5)
)来使这个代码工作。
但是,我觉得这里有一些更深层次的困惑:
class SimpleCounter():
def __init__(self, startValue, firstValue):
firstValue = startValue
self.count = startValue
为什么将startValue
存储到firstValue
然后将其丢弃?在我看来,你错误地认为__init__
的参数自动成为类的属性。事实并非如此。您必须明确指定它们。由于两个值都等于startValue
,因此您无需将其传递给构造函数。你可以像这样分配给self.firstValue
:
class SimpleCounter():
def __init__(self, startValue):
self.firstValue = startValue
self.count = startValue