>>> class Potato(object):
... def method(self, spam):
... print self, spam
...
>>> spud = Potato()
工作内容:
>>> Potato.method(spud, **{'spam': 123})
<__main__.Potato object at 0x7f86cd4ee9d0> 123
无法工作:
>>> Potato.method(**{'self': spud, 'spam': 123})
# TypeError
但为什么不行呢?我以为'self'只是一种惯例,并没有什么本质上特别的地方?
self
是第一个参数,而不是它被称为self
。也许它并不希望通过名称展开,而是通过位置展开。 - salezicaPotato.method(self=spud, spam=123)
时遇到了同样的问题。星号参数并不是真正的问题所在。 - Ismail Badawiself
只是一种约定,所以你不能这样做。因为self
这个名称没有特殊的状态,Python只知道哪个参数是self
,因为它在参数列表中是第一个,所以必须按位置传递。 - BrenBarnTypeError: unbound method method() must be called with Potato instance as first argument (got Potato instance instead)
:) - wim