See also
from abc import ABC, abstractmethod
class MyABC(ABC):
@property
@abstractmethod
def my_property(self) -> Any:
raise NotImplementedError()
class MyDerived(MyABC):
@MyABC.my_property.getter
def my_property(self) -> Any:
return ...
# once this class has a property called `my_property`, we can also set a setter function for it
@my_property.setter
def my_property(self, val: Any) -> None:
...