I'm confused about what a staticproperty would even be. Usually, properties are a way to provide an interface that "looks like" a simple attribute, but does some computation under the hood. But that computation usually requires instance data to do its thing -- so a static one wouldn't be useful. In fact, in Python, a staticmethod is not very useful at all anyway, all it is is a function that lives in the class namespace. Making it a property would make it look like a class attribute. Hmm, I guess one use case would be to make a read only class attribute. Anyway, the thing is that both staticmethod and property are implimented using descriptors, which I think can only be invoked by instance attribute lookup. That is, the class attribute IS a descriptor instance. And Chris A says -- there may be a way to get a similar effect with Metaclasses, but we'd have to know what your goal is to advise on how to do that. Note: you can put a descriptor on class, and the __get__ will be called, to get part of what I think you want: In [52]: class Ten: ...: def __get__(self, obj, objtype=None): ...: return 10 ...: def __set__(self, obj, value): ...: raise AttributeError("attribute can not be set") ...: In [53]: class A: ...: y = Ten() ...: # attribute access does call the descriptor's __get__: In [54]: A.y Out[54]: 10 But setting the attribute replaces the descriptor, rather than raising an exception: In [55]: A.y = 12 In [56]: A.y Out[56]: 12 Honestly, I don't quite "get" how all this works, but the usual thing is for Descriptors to be invoked on instance attribute access. -CHB On Sat, Dec 18, 2021 at 8:30 AM <me@chenjt.com> wrote:
In the following situations:
class Data(object): @staticmethod @property def imagesTotal(): return 10
print(Data.imagesTotal)
The "print(Data.imagesTotal)" can't print "10", it print "<property object at 0x...>".
It might be a good idea to use "@staticproperty" to solve this problem. "@staticproperty" is a decorators, it mix the @staticmethod and @property. Then the static property has getter and setter. _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-leave@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/DEC3AA... Code of Conduct: http://python.org/psf/codeofconduct/
-- Christopher Barker, PhD (Chris) Python Language Consulting - Teaching - Scientific Software Development - Desktop GUI and Web Development - wxPython, numpy, scipy, Cython