From: Guido van Rossum Date: Wed, 1 Aug 2007 17:32:28 +0000 (+0000) Subject: Add @abstractproperty. X-Git-Tag: v3.0a1~556 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b31339fa02e48282b88f82942539ecc12e74ea63;p=python Add @abstractproperty. --- diff --git a/Lib/abc.py b/Lib/abc.py index ae5113a204..ab6325e713 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()).