diff options
author | Nick Coghlan <ncoghlan@gmail.com> | 2012-12-08 12:57:21 (GMT) |
---|---|---|
committer | Nick Coghlan <ncoghlan@gmail.com> | 2012-12-08 12:57:21 (GMT) |
commit | 0c1034f41964140624e8579077c2aa328a440558 (patch) | |
tree | f672274ce2bebeda7e00d7d55056c7f80ae5bd51 | |
parent | 10cdf99a90b6a4ff8b976a16ac9122d1a3354cbb (diff) | |
parent | cea27be888a99e9a1aa03bff639cce57a5d6d3ba (diff) | |
download | cpython-0c1034f41964140624e8579077c2aa328a440558.zip cpython-0c1034f41964140624e8579077c2aa328a440558.tar.gz cpython-0c1034f41964140624e8579077c2aa328a440558.tar.bz2 |
Merge from 3.3 (issue #16267)
-rw-r--r-- | Doc/library/abc.rst | 59 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
2 files changed, 47 insertions, 15 deletions
diff --git a/Doc/library/abc.rst b/Doc/library/abc.rst index dca6993..db3adbd 100644 --- a/Doc/library/abc.rst +++ b/Doc/library/abc.rst @@ -208,16 +208,20 @@ The :mod:`abc` module also provides the following decorators: A subclass of the built-in :func:`classmethod`, indicating an abstract classmethod. Otherwise it is similar to :func:`abstractmethod`. - Usage:: + This special case is deprecated, as the :func:`classmethod` decorator + is now correctly identified as abstract when applied to an abstract + method:: class C(metaclass=ABCMeta): - @abstractclassmethod + @classmethod + @abstractmethod def my_abstract_classmethod(cls, ...): ... .. versionadded:: 3.2 .. deprecated:: 3.3 - Use :class:`classmethod` with :func:`abstractmethod` instead. + It is now possible to use :class:`classmethod` with + :func:`abstractmethod`, making this decorator redundant. .. decorator:: abstractstaticmethod(function) @@ -225,21 +229,26 @@ The :mod:`abc` module also provides the following decorators: A subclass of the built-in :func:`staticmethod`, indicating an abstract staticmethod. Otherwise it is similar to :func:`abstractmethod`. - Usage:: + This special case is deprecated, as the :func:`staticmethod` decorator + is now correctly identified as abstract when applied to an abstract + method:: class C(metaclass=ABCMeta): - @abstractstaticmethod + @staticmethod + @abstractmethod def my_abstract_staticmethod(...): ... .. versionadded:: 3.2 .. deprecated:: 3.3 - Use :class:`staticmethod` with :func:`abstractmethod` instead. + It is now possible to use :class:`staticmethod` with + :func:`abstractmethod`, making this decorator redundant. .. decorator:: abstractproperty(fget=None, fset=None, fdel=None, doc=None) - A subclass of the built-in :func:`property`, indicating an abstract property. + A subclass of the built-in :func:`property`, indicating an abstract + property. Using this function requires that the class's metaclass is :class:`ABCMeta` or is derived from it. A class that has a metaclass derived from @@ -247,23 +256,43 @@ The :mod:`abc` module also provides the following decorators: and properties are overridden. The abstract properties can be called using any of the normal 'super' call mechanisms. - Usage:: + This special case is deprecated, as the :func:`property` decorator + is now correctly identified as abstract when applied to an abstract + method:: class C(metaclass=ABCMeta): - @abstractproperty + @property + @abstractmethod 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:: + The above example defines a read-only property; you can also define a + read-write abstract property by appropriately marking one or more of the + underlying methods as abstract:: class C(metaclass=ABCMeta): - def getx(self): ... - def setx(self, value): ... - x = abstractproperty(getx, setx) + @property + def x(self): + ... + + @x.setter + @abstractmethod + def x(self, val): + ... + + If only some components are abstract, only those components need to be + updated to create a concrete property in a subclass:: + + class D(C): + @C.x.setter + def x(self, val): + ... + .. deprecated:: 3.3 - Use :class:`property` with :func:`abstractmethod` instead + It is now possible to use :class:`property`, :meth:`property.getter`, + :meth:`property.setter` and :meth:`property.deleter` with + :func:`abstractmethod`, making this decorator redundant. .. rubric:: Footnotes @@ -460,6 +460,9 @@ Build Documentation ------------- +- Issue #16267: Better document the 3.3+ approach to combining + @abstractmethod with @staticmethod, @classmethod and @property + - Issue #15209: Clarify exception chaining description in exceptions module documentation |