Raymond Hettinger <raymond.hettin...@gmail.com> added the comment:

The classmethod and staticmethod decorators have somewhat different semantics.  
Accessing a classmethod with C.cm creates a bound method object which has both 
__call__ and __get__.  In contrast, accessing a staticmethod with C.sm returns 
the underlying function.  So there is no opportunity for a customized __get__ 
method as we have with classmethod.

Also, even if C.sm did return a custom descriptor, the code example still can't 
be made to work because the __get__ method on property objects is hardwired to 
pass in an instance.¹  That means that the underlying method must have a "self" 
argument.  

Another issue is that properties have __set__ and __delete__ methods which 
could not be made to work without a reference to the class or instance.

To make a read-only class variable, a metaclass would be needed.  While it is 
possible to write a descriptor to make C.FINE_STRUCTURE_CONSTANT call a 
function that returns 1/137, there is no way for the descriptors to block the 
assignment:  C.FINE_STRUCTURE_CONSTANT = 1 / 100

Thanks for the suggestion, but I don't think this can be made to work.  

¹ https://docs.python.org/3/howto/descriptor.html#properties

----------
nosy: +rhettinger
resolution:  -> rejected
stage:  -> resolved
status: open -> closed

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue44973>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to