类型错误蟒蛇

问题描述:

我看着这里的例子C-like structures in 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

哦没关系..我忘了PU里边反价值。与提交 – Fraz 2012-02-29 21:48:09

+1

您定义'__init__'不接受任何位置参数(除'self'外),只有关键字参数。但是当你实例化它时,你传递了两个位置参数。 – 2012-02-29 21:48:19

您必须传递关键字参数。否则,它不知道要给属性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的功能,你会得到一个错误。

通过在**kwds参数之前为您的__init__函数使用**来请求关键字参数。

这工作:

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