typeerror python

时间:2012-02-29 21:44:56

标签: python

我在这里查看了示例C-like structures in Python

但是这个例子是“束”,但无论如何代码都在这里

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

BUt我正在使用它

p = Bunch(x,y)

BUt我收到类型错误

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

我做错了什么?

2 个答案:

答案 0 :(得分:3)

您必须传递关键字参数。否则,它不知道您要为属性xy指定的名称。

尝试

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

为了放大这一点,当你在函数或方法的参数中看到**argname时,它具有非常特定的含义。这意味着将传递给函数的所有关键字参数都放在尚未命名的位置,并将它们组合成一个名为argname的字典。请参阅下面的示例。

>>> 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

如果您尝试将非关键字参数传递给仅接受**kwargs的函数,则会出现错误。

答案 1 :(得分:1)

您要在**函数的**kwds参数之前使用__init__来询问关键字参数。

这有效:

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