from abc import ABC, abstractmethod class Foo(ABC): @classmethod @property @abstractmethod def x(cls): pass class Bar(Foo): x = 1 # This works (but is hacky, and possibly shouldn't work). Bar() class FooToo(ABC): @property @abstractmethod def x(self): pass class BarToo(FooToo): def __init__(self): self.x = 1 # This does not work. BarToo()