2012-02-25 11 views
4

私のエラーに関してここでいくつかの答えを見ましたが、それは私を助けませんでした。私はPythonのクラスで絶対的なnoobであり、ちょうど9月にこのコードをやり始めました。とにかく私のコード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) 

を見て、これは私が2つの入力値、startValuefirstValueため

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

ちなみに、あなたのクラスは、(あなたがなぜ興味がある場合のpython新しいスタイルのクラスのためのgoogle)object' 'から継承しなければなりません – ThiefMaster

答えて

8

あなた__init__()定義は両方startValuefirstValueが必要です。したがって、このコードを動作させるには、両方を渡す必要があります(すなわち、a = SimpleCounter(5, 5))。

はしかし、私はいくつかのより深い混乱がここに仕事でありますような印象を得る:

class SimpleCounter(): 

    def __init__(self, startValue, firstValue): 
     firstValue = startValue 
     self.count = startValue 

あなたはfirstValuestartValueを保存し、それを捨てるのはなぜ? __init__へのパラメータが自動的にクラスの属性になると誤って考えているようです。そうではありません。それらを明示的に割り当てる必要があります。両方の値はstartValueに等しいので、コンストラクタに渡す必要はありません。あなただけそうのようなself.firstValueに割り当てることができます。

class SimpleCounter(): 

    def __init__(self, startValue): 
     self.firstValue = startValue 
     self.count = startValue 
10

__init__()定義コールを取得エラーです。あなたは1つの値しか提供していません。

def __init__(self, startValue, firstValue): 

# Need another param for firstValue 
a = SimpleCounter(5) 

# Something like 
a = SimpleCounter(5, 5) 

実際に2つの値が必要かどうかは、別の話です。あなたは一つだけを使用するように__init__()を再定義することができるようにstartValueのみ、firstValueの値を設定するために使用されます。

# No need for startValue 
def __init__(self, firstValue): 
    self.count = firstValue 


a = SimpleCounter(5) 
関連する問題