При чтении о unification of types я наткнулся на то, что встроенных типов имеют method_descriptor
s и builtin_function_or_method
s вместо method
s и function
s, почему?несогласованности среди встроенных типов и определяемых пользователем
>>> list.append
<method 'append' of 'list' objects>
>>> type(list.append)
<class 'method_descriptor'>
>>> [].append
<built-in method append of list object at 0x7f0c4214aef0>
>>> type([].append)
<class 'builtin_function_or_method'>
>>> class A(list):
... def append(self): pass
...
>>> A.append
<function A.append at 0x7f0c42168dd0>
>>> type(A.append)
<class 'function'>
>>> A().append
<bound method A.append of []>
>>> type(A().append)
<class 'method'>
Там нет никаких оснований для class A
к подклассу список, я просто хотел показать, что типы отличаются.
Благодарим за ответ. Я понимаю, что существует разница в реализации, но я хочу знать, почему эти методы должны быть разных типов. Есть ли причина совместимости, или это просто закончилось тем, что было таким, и не создавало никаких проблем? –
@ hack.augusto Я попытался добавить еще несколько объяснений, посмотреть, помогает ли это – alko
отличный ответ, спасибо –