Class property (was: Class methods)
Bengt Richter
bokr at oz.net
Fri Oct 14 22:10:50 EDT 2005
On Thu, 06 Oct 2005 11:05:10 +0200, Laszlo Zsolt Nagy <gandalf at designaproduct.biz> wrote:
>Hughes, Chad O wrote:
>
>> Is there any way to create a class method? I can create a class
>> variable like this:
>>
>Hmm, seeing this post, I have decided to implement a 'classproperty'
>descriptor.
>But I could not. This is what I imagined:
>
>class A(object):
> _x = 0
> @classmethod
> def get_x(cls):
> print "Getting x..."
> return cls._x
> @classmethod
> def set_x(cls,value):
> print "Setting x..."
> cls._x = value
> x = classproperty(get_x,set_x)
>
>Usage example:
>
> >>>print A.x
>Getting x
>0
> >>>A.x = 8
>Setting x
> >>>print A.x
>Getting x
>8
>
>I was trying for a while, but I could not implement a 'classproperty'
>function. Is it possible at all?
>Thanks,
>
> Les
>
Using Peter's advice (not tested beyond what you see):
>>> class A(object):
... _x = 0
... class __metaclass__(type):
... def get_x(cls):
... print "Getting x..."
... return cls._x
... def set_x(cls,value):
... print "Setting x..."
... cls._x = value
... x = property(get_x, set_x)
...
>>> A.x
Getting x...
0
>>> A.x = 8
Setting x...
>>> A.x
Getting x...
8
>>> vars(A).items()
[('__module__', '__main__'), ('__metaclass__', <class '__main__.__metaclass__'>), ('_x', 8), ('_
_dict__', <attribute '__dict__' of 'A' objects>), ('__weakref__', <attribute '__weakref__' of 'A
' objects>), ('__doc__', None)]
>>> A._x
8
>>> vars(A).keys()
['__module__', '__metaclass__', '_x', '__dict__', '__weakref__', '__doc__']
Regards,
Bengt Richter
More information about the Python-list
mailing list