bpo-33816: Remove outdated metaclass example (GH-7566)
(cherry picked from commit c2ccac7b9f
)
Co-authored-by: Andrés Delfino <adelfino@gmail.com>
This commit is contained in:
parent
d2be9a5c13
commit
1b80a373d1
|
@ -1999,46 +1999,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
|
||||
----------------------------------------
|
||||
|
|
Loading…
Reference in New Issue