Is there any way to create a class property in Python?

后端 未结 1 1363
栀梦
栀梦 2020-12-31 18:43

The following doesn\'t work for some reason:

>>> class foo(object):
...     @property
...     @classmethod
...     def bar(cls):
...             ret         


        
相关标签:
1条回答
  • 2020-12-31 19:19

    If you want the descriptor property to trigger when you get an attribute from object X, then you must put the descriptor in type(X). So if X is a class, the descriptor must go in the class's type, also known as the class's metaclass -- no "trickery" involved, it's just a matter of completely general rules.

    Alternatively, you might write your own special-purpose descriptor. See here for an excellent "how-to" treaty on descriptors. Edit for example:

    class classprop(object):
      def __init__(self, f):
        self.f = classmethod(f)
      def __get__(self, *a):
        return self.f.__get__(*a)()
    
    class buh(object):
      @classprop
      def bah(cls): return 23
    
    print buh.bah
    

    emits 23, as desired.

    0 讨论(0)
提交回复
热议问题