Things are wrapped in methods if they are functions (i.e. their type types.FunctionType).
This is because the type of function determines the method __get__that implements the descriptor protocol , which changes what happens when you look A.bup. intand most other non-functional calls do not define this method:
>>> (lambda x: x).__get__
<method-wrapper '__get__' of function object at 0x0000000003710198>
>>> int.__get__
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
int.__get__
AttributeError: type object 'int' has no attribute '__get__'
, -, - . property. property - , , a __get__ ( __set__), , .