Kaydet (Commit) c2ccac7b authored tarafından Andrés Delfino's avatar Andrés Delfino Kaydeden (comit) INADA Naoki

bpo-33816: Remove outdated metaclass example (GH-7566)

üst 37cd982d
...@@ -1998,46 +1998,14 @@ becomes the :attr:`~object.__dict__` attribute of the class object. ...@@ -1998,46 +1998,14 @@ becomes the :attr:`~object.__dict__` attribute of the class object.
Describes the implicit ``__class__`` closure reference Describes the implicit ``__class__`` closure reference
Metaclass example Uses for metaclasses
^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^
The potential uses for metaclasses are boundless. Some ideas that have been The potential uses for metaclasses are boundless. Some ideas that have been
explored include enum, logging, interface checking, automatic delegation, explored include enum, logging, interface checking, automatic delegation,
automatic property creation, proxies, frameworks, and automatic resource automatic property creation, proxies, frameworks, and automatic resource
locking/synchronization. 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 Customizing instance and subclass checks
---------------------------------------- ----------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment