property using a classmethod

Scott David Daniels Scott.Daniels at Acm.Org
Thu Jul 9 13:40:58 EDT 2009


Emanuele D'Arrigo wrote:
> class MyClass(object):
>     @classmethod
>     def myClassMethod(self):
>          print "ham"
>      myProperty = property(myClassMethod, None, None)
> 
> ... doesn't work and returns a TypeError: .... So, how do I do this?
> Ultimately all I want is a non-callable class-level attribute
> MyClass.myProperty that gives the result of MyClass.myClassMethod().

properties affect instances, and classes are instances of types.
What you want is a new metaclass:

     class MyType(type):
         @property
         def demo(class_):
             return class_.a + 3

     class MyClass(object):
         __metaclass__ = MyType
         a = 5

     print MyClass.a, MyClass.demo

--Scott David Daniels
Scott.Daniels at Acm.Org



More information about the Python-list mailing list