В чем разница между функцией, несвязанным методом и связанным методом?

Я задаю этот вопрос из-за обсуждения в ветке комментариевэтот ответ, Я нахожусь на 90% пути, чтобы обдумать это.

In [1]: class A(object):  # class named 'A'
   ...:     def f1(self): pass
   ...:
In [2]: a = A()  # an instance

f1 существует в трех разных формах:

In [3]: a.f1  # a bound method
Out[3]: <bound method a.f1 of <__main__.A object at 0x039BE870>>
In [4]: A.f1  # an unbound method
Out[4]: <unbound method A.f1>
In [5]: a.__dict__['f1']  # doesn't exist
KeyError: 'f1'
In [6]: A.__dict__['f1']  # a function
Out[6]: <function __main__.f1>

В чем разница междуbound method, unbound method а такжеfunction объекты, все из которых описаны f1? Как назвать эти три объекта? Как они могут быть преобразованы друг в друга?документация об этом материале довольно сложно понять.

Ответы на вопрос(5)

Ваш ответ на вопрос