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