On Thu, 6 Oct 2016 05:53 pm, ast wrote:

[...]
> * For instance methods, there is no decorator:
> 
> def funct2(self, a, b):
> ...
> 
> self is automatically filled with the instance when we call
> funct2 from an instance and not filled if funct2 is called from
> a class.
> But there is no decorator, why ? Is python doing the conversion
> of funct2 to a descriptor itself, behind the scene ?

Functions don't need to be decorated because they are already descriptors.

Descriptors have __get__, __set__  or __delete__ methods. In the case of
methods, it is __get__ which does the work. Normally this happens
automatically, but we can do it by hand:


py> class X(object):
...     def func(self):
...             pass
...
py> x = X()
py> vars(X)['func']
<function X.func at 0xb7b0b80c>
py> vars(X)['func'].__get__(x, X)
<bound method X.func of <__main__.X object at 0xb7b0ad8c>>
py> x.func
<bound method X.func of <__main__.X object at 0xb7b0ad8c>>



> * static methods are decorated too
> 
> @staticmethod
> def funct3(a, b):
> ...
> 
> The 1st argument is not supposed to be automatically filled
> So what the decorator used for ?
> Just to distinguish funct3 from an instance method ?

Correct.




-- 
Steve
“Cheer up,” they said, “things could be worse.” So I cheered up, and sure
enough, things got worse.

-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to