TypeError:__ init __()需要3个参数(给定2个)

时间:2012-02-25 14:48:20

标签: python class arguments

我在这里看到了一些关于我的错误的答案,但它没有帮助我。我是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

2 个答案:

答案 0 :(得分:10)

__init__()定义需要2个输入值,startValuefirstValue。您只提供了一个值。

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