我在这里查看了示例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)
我做错了什么?
答案 0 :(得分:3)
您必须传递关键字参数。否则,它不知道您要为属性x
和y
指定的名称。
尝试
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)