2012-02-25 3 views
4

Я видел несколько ответов здесь относительно моей ошибки, но это не помогло мне. Я абсолютный noob в классах на python и только начал делать этот код еще в сентябре. Во всяком случае, посмотрите на мой кодTypeError: __init __() принимает ровно 3 аргумента (2 приведенных)

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

Fyi, ваши классы должны наследовать от 'object' (Google для классов питон нового стиля, если вам интересно, почему) – ThiefMaster

ответ

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 
10

The __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) 
Смежные вопросы