@property; @classmethod; def f()
Ian Kelly
ian.g.kelly at gmail.com
Sat Jan 1 21:42:09 EST 2011
On 1/1/2011 6:55 PM, K. Richard Pixley wrote:
> Can anyone explain to me why this doesn't work?
>
> class Foo(object):
> @property
> @classmethod
> def f(cls):
> return 4
>
> I mean, I think it seems to be syntactically clear what I'm trying to
> accomplish. What am I missing?
First, because classmethod returns a classmethod instance, not a
function, so what gets passed to property is the classmethod descriptor,
not an actual callable.
Second, because a property descriptor just returns itself when accessed
on the class. It only works on instances.
To do what you want, I think you would need to write your own descriptor
class. Something like this:
class classproperty(object):
def __init__(self, getter):
self._getter = getter
def __get__(self, instance, owner):
return self._getter(owner)
class Foo(object):
@classproperty
def f(cls):
return 4
Modify as needed if you want to accomodate setters and deleters as well.
Cheers,
Ian
More information about the Python-list
mailing list