>>> class Potato(object):
... def method(self, spam):
... print self, spam
...
>>> spud = Potato()
Works:Perché non possiamo ** unsplat 'self' in un metodo?
>>> Potato.method(spud, **{'spam': 123})
<__main__.Potato object at 0x7f86cd4ee9d0> 123
non funziona:
>>> Potato.method(**{'self': spud, 'spam': 123})
# TypeError
Ma perché no? Pensavo che il 'sé' fosse solo una convenzione, e non c'era nulla di intrinsecamente speciale in questo argomento? instancemethod
oggetto wrapper di
Questa è una domanda interessante. Un pensiero: la convenzione è che "io" è il primo argomento, non che si chiama "sé". Forse non si aspetta di essere spacchettato per nome, ma per posizione – slezica
Si ottiene lo stesso problema con 'Potato.method (self = spud, spam = 123)'. Lo splat non è davvero il problema. –
È proprio perché "io" è solo una convenzione che non puoi fare questo. Poiché il nome 'self' non ha uno stato speciale, Python conosce solo quale argomento è' self' perché è * primo * nella lista degli argomenti, quindi deve essere passato in modo posizionale. – BrenBarn