summaryrefslogtreecommitdiffstats
path: root/Doc/reference
diff options
context:
space:
mode:
authorAndrés Delfino <adelfino@gmail.com>2018-11-16 11:41:55 (GMT)
committerINADA Naoki <methane@users.noreply.github.com>2018-11-16 11:41:55 (GMT)
commitc2ccac7b9f9a1132ca36255b0ddfeecef4371aa3 (patch)
tree3c8f47fb44f6ff8ee0bf4f35ab69915bc3c2781e /Doc/reference
parent37cd982df02795905886ab36a2378ed557cb6f60 (diff)
downloadcpython-c2ccac7b9f9a1132ca36255b0ddfeecef4371aa3.zip
cpython-c2ccac7b9f9a1132ca36255b0ddfeecef4371aa3.tar.gz
cpython-c2ccac7b9f9a1132ca36255b0ddfeecef4371aa3.tar.bz2
bpo-33816: Remove outdated metaclass example (GH-7566)
Diffstat (limited to 'Doc/reference')
-rw-r--r--Doc/reference/datamodel.rst36
1 files changed, 2 insertions, 34 deletions
diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst
index 24c647d..79fde4b 100644
--- a/Doc/reference/datamodel.rst
+++ b/Doc/reference/datamodel.rst
@@ -1998,46 +1998,14 @@ becomes the :attr:`~object.__dict__` attribute of the class object.
Describes the implicit ``__class__`` closure reference
-Metaclass example
-^^^^^^^^^^^^^^^^^
+Uses for metaclasses
+^^^^^^^^^^^^^^^^^^^^
The potential uses for metaclasses are boundless. Some ideas that have been
explored include enum, logging, interface checking, automatic delegation,
automatic property creation, proxies, frameworks, and automatic resource
locking/synchronization.
-Here is an example of a metaclass that uses an :class:`collections.OrderedDict`
-to remember the order that class variables are defined::
-
- class OrderedClass(type):
-
- @classmethod
- def __prepare__(metacls, name, bases, **kwds):
- return collections.OrderedDict()
-
- def __new__(cls, name, bases, namespace, **kwds):
- result = type.__new__(cls, name, bases, dict(namespace))
- result.members = tuple(namespace)
- return result
-
- class A(metaclass=OrderedClass):
- def one(self): pass
- def two(self): pass
- def three(self): pass
- def four(self): pass
-
- >>> A.members
- ('__module__', 'one', 'two', 'three', 'four')
-
-When the class definition for *A* gets executed, the process begins with
-calling the metaclass's :meth:`__prepare__` method which returns an empty
-:class:`collections.OrderedDict`. That mapping records the methods and
-attributes of *A* as they are defined within the body of the class statement.
-Once those definitions are executed, the ordered dictionary is fully populated
-and the metaclass's :meth:`__new__` method gets invoked. That method builds
-the new type and it saves the ordered dictionary keys in an attribute
-called ``members``.
-
Customizing instance and subclass checks
----------------------------------------