From b31339fa02e48282b88f82942539ecc12e74ea63 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 1 Aug 2007 17:32:28 +0000 Subject: Add @abstractproperty. --- Lib/abc.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Lib/abc.py b/Lib/abc.py index ae5113a..ab6325e 100644 --- a/Lib/abc.py +++ b/Lib/abc.py @@ -24,6 +24,31 @@ def abstractmethod(funcobj): return funcobj +class abstractproperty(property): + """A decorator indicating abstract properties. + + Requires that the metaclass is ABCMeta or derived from it. A + class that has a metaclass derived from ABCMeta cannot be + instantiated unless all of its abstract properties are overridden. + + Usage: + + class C(metaclass=ABCMeta): + @abstractproperty + def my_abstract_property(self): + ... + + This defines a read-only property; you can also define a read-write + abstract property using the 'long' form of property declaration: + + class C(metaclass=ABCMeta): + def getx(self): ... + def setx(self, value): ... + x = abstractproperty(getx, setx) + """ + __isabstractmethod__ = True + + class _Abstract(object): """Helper class inserted into the bases by ABCMeta (using _fix_bases()). -- cgit v0.12