1

On an abstract class, in Python 3.6+, I'm trying to define a class property that is derived from other (abstract) class properties.

What I've tried:

from abc import abstractmethod

class AbstractAnimal:
    
    @classmethod
    @property
    @abstractmethod
    def front_limbs(cls):
        raise NotImplementedError
    
    @classmethod
    @property
    @abstractmethod
    def back_limbs(cls):
        raise NotImplementedError
    
    @classmethod
    @property
    def limbs(cls):
        return [cls.front_limbs, cls.back_limbs]
    
class Monkey(AbstractAnimal):
    front_limbs = 'arms'
    back_limbs = 'legs'

print(Monkey.front_limbs)
print(Monkey.back_limbs)
print(Monkey.limbs)

I expect/desire:

arms
legs
[arms, legs]

I get:

arms
legs
<bound method ? of <class '__main__.Monkey'>>

I tried looking at previous questions, as this feels pretty basic, but none of them discussed derived class properties (this one, for example, helped me with abstract properties to begin with).

Itamar Mushkin
  • 2,803
  • 2
  • 16
  • 32

0 Answers0