Почему я не могу передать сам как параметр, передаваемый по имени к методу экземпляра в Python?

Это работает:

>>> def bar(x, y):
...     print x, y
...
>>> bar(y=3, x=1)
1 3

И это работает:

>>> class Foo(object):
...     def bar(self, x, y):
...             print x, y
...
>>> z = Foo()
>>> z.bar(y=3, x=1)
1 3

И даже это работает:

>>> Foo.bar(z, y=3, x=1)
1 3

Но почему это не работает в Python 2.x?

>>> Foo.bar(self=z, y=3, x=1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unbound method bar() must be called with Foo instance as first argument (got nothing instead)

Это делает метапрограммирование более трудным, потому что оно требует обработки особого случая. Мне любопытно, если это так или иначе необходимо семантикой Python или просто артефактом реализации.

5
задан wim 8 October 2019 в 17:58
поделиться