2012-02-29 19 views
-1

私はここで例C-like structures in PythonTypeError例外は、Python

に見えたが、一例では、「束」であるが、とにかくコードはここに

class Bunch: 
def __init__(self, **kwds): 
    self.__dict__.update(kwds) 

ですが、私はこの

p = Bunch(x,y) 
のようにそれを使用しています

BUtタイプエラーが発生しました

TypeError: __init__() takes exactly 1 argument (3 given) 

私は何が間違っているのですか?

+0

oohの気にしない..私はPUに間に合わ値を忘れてしまいました。提出された – Fraz

+1

'__init__'は、(' self'とは別に)位置引数を取らないように、キーワード引数だけを定義しました。しかし、それをインスタンス化するときに、2つの位置的引数を渡します。 –

答えて

3

キーワード引数を渡す必要があります。それ以外の場合は、属性xyに付けたい名前は分かりません。

あなたが関数やメソッドの引数で**argnameを見ると、それは非常に特別な意味を持っている。この上で増幅するために

p = Bunch(x=x, y=y) 

をお試しくださいこれは、関数に渡されたすべてのキーワード引数を、まだ指定されていないものとみなし、それらを一緒に組み合わせてargnameという辞書にまとめることを意味します。以下の例を参照してください。あなただけ**kwargsを受け入れる関数に非キーワード引数を渡すしようとした場合

>>> class Bunch(object): 
...  def __init__(self, **kwargs): 
...   self.__dict__.update(kwargs) 
...   print kwargs 
... 
>>> x, y = 5, 6 
>>> p = Bunch(x=x, y=y) 
{'y': 6, 'x': 5} 
>>> p.x 
5 
>>> p.y 
6 

、あなたがエラーを取得します。

1

あなたの__init__ファンクションのパラメータ**kwdsの前に、そのキーワード**を使用してキーワード引数を要求しています。

これは動作します:

p = Bunch(x=x, y=y) 
関連する問題