Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Making abstract property in Python 3 results in AttributeError

How do you make an abstract property in python?

import abc
class MyClass(abc.ABC):
    @abc.abstractmethod
    @property
    def foo(self):
        pass

results in the error AttributeError: attribute '__isabstractmethod__' of 'property' objects is not writable

like image 285
cowlinator Avatar asked Sep 04 '25 04:09

cowlinator


1 Answers

It turns out that order matters when it comes to python decorators.

@abc.abstractmethod
@property

is not the same as

@property
@abc.abstractmethod

The correct way to create an abstract property is:

import abc
class MyClass(abc.ABC):
    @property
    @abc.abstractmethod
    def foo(self):
        pass
like image 120
cowlinator Avatar answered Sep 05 '25 20:09

cowlinator