In python objects/variables are wrapped into methods if they are function (i.e type( xxx ) gives FunctionType)
This is because the FunctionType defines a __get__ method, implementing the descriptor protocol, which changes what happens when A.b is looked up. int and most other non-function callables do not define this method:
>>> (lambda x: x).__get__
<method-wrapper '__get__' of function object at 0x0000000003710198>
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
AttributeError: type object 'int' has no attribute '__get__'
You could make your own method-wrapper-like behavior by defining some other sort of descriptor. An example of this is the property. property is a type that is not a function, but also defines a __get__ (and __set__) to change what happens when a property is looked up