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 <[email protected]> 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 -- [email protected]
> To unsubscribe send an email to [email protected]
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/[email protected]/message/DEC3AA2NN5KTI5LQ6M7FIRLPDYLNSP7G/
> 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
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/7WACW25ZZELEMVWE6CAX7DICPIJUXGYC/
Code of Conduct: http://python.org/psf/codeofconduct/