类型错误蟒蛇
问题描述:
我看着这里的例子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)
我在做什么错?
答
您必须传递关键字参数。否则,它不知道要给属性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
的功能,你会得到一个错误。
答
通过在**kwds
参数之前为您的__init__
函数使用**
来请求关键字参数。
这工作:
p = Bunch(x=x, y=y)
哦没关系..我忘了PU里边反价值。与提交 – Fraz 2012-02-29 21:48:09
您定义'__init__'不接受任何位置参数(除'self'外),只有关键字参数。但是当你实例化它时,你传递了两个位置参数。 – 2012-02-29 21:48:19