Сегодня я определил класс для тестирования следующего:
class B(object):
def p(self):
print("p")
И позже я сделал это:
>>> type(B.__dict__['p'])
<type 'function'>
>>> type(B.p)
<type 'instancemethod'>
Итак, почему? Не B.p
и B.__dict__['p']
тот же объект?
Мое удивление только увеличилось, когда я пробовал это:
>>> B.__dict__['p']
<function p at 0x3d2bc80>
>>> type(B.__dict__['p'])
<type 'function'>
Хорошо, насколько это хорошо, тип находится в обоих результатах function
, но когда я попытался:
>>> B.p
<unbound method B.p>
>>> type(B.p)
<type 'instancemethod'>
Что?!, Почему? unbound method
и instancemethod
? То же самое? Почему два разных имени?
Ну, похоже, python полон сюрпризов!
И это питон, который я использую:
Python 2.7.4 (default, Sep 26 2013, 03:20:26)
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.