mirror of
https://github.com/python/cpython
synced 2024-09-16 00:17:02 +00:00
Add notes for maintaining ABCs (#92736)
This commit is contained in:
parent
079f0dd719
commit
a834e2d8e1
|
@ -6,6 +6,32 @@
|
||||||
Unit tests are in test_collections.
|
Unit tests are in test_collections.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
############ Maintenance notes #########################################
|
||||||
|
#
|
||||||
|
# ABCs are different from other standard library modules in that they
|
||||||
|
# specify compliance tests. In general, once an ABC has been published,
|
||||||
|
# new methods (either abstract or concrete) cannot be added.
|
||||||
|
#
|
||||||
|
# Though classes that inherit from an ABC would automatically receive a
|
||||||
|
# new mixin method, registered classes would become non-compliant and
|
||||||
|
# violate the contract promised by ``isinstance(someobj, SomeABC)``.
|
||||||
|
#
|
||||||
|
# Though irritating, the correct procedure for adding new abstract or
|
||||||
|
# mixin methods is to create a new ABC as a subclass of the previous
|
||||||
|
# ABC. For example, union(), intersection(), and difference() cannot
|
||||||
|
# be added to Set but could go into a new ABC that extends Set.
|
||||||
|
#
|
||||||
|
# Because they are so hard to change, new ABCs should have their APIs
|
||||||
|
# carefully thought through prior to publication.
|
||||||
|
#
|
||||||
|
# Since ABCMeta only checks for the presence of methods, it is possible
|
||||||
|
# to alter the signature of a method by adding optional arguments
|
||||||
|
# or changing parameters names. This is still a bit dubious but at
|
||||||
|
# least it won't cause isinstance() to return an incorrect result.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
from abc import ABCMeta, abstractmethod
|
from abc import ABCMeta, abstractmethod
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,31 @@
|
||||||
|
|
||||||
TODO: Fill out more detailed documentation on the operators."""
|
TODO: Fill out more detailed documentation on the operators."""
|
||||||
|
|
||||||
|
############ Maintenance notes #########################################
|
||||||
|
#
|
||||||
|
# ABCs are different from other standard library modules in that they
|
||||||
|
# specify compliance tests. In general, once an ABC has been published,
|
||||||
|
# new methods (either abstract or concrete) cannot be added.
|
||||||
|
#
|
||||||
|
# Though classes that inherit from an ABC would automatically receive a
|
||||||
|
# new mixin method, registered classes would become non-compliant and
|
||||||
|
# violate the contract promised by ``isinstance(someobj, SomeABC)``.
|
||||||
|
#
|
||||||
|
# Though irritating, the correct procedure for adding new abstract or
|
||||||
|
# mixin methods is to create a new ABC as a subclass of the previous
|
||||||
|
# ABC.
|
||||||
|
#
|
||||||
|
# Because they are so hard to change, new ABCs should have their APIs
|
||||||
|
# carefully thought through prior to publication.
|
||||||
|
#
|
||||||
|
# Since ABCMeta only checks for the presence of methods, it is possible
|
||||||
|
# to alter the signature of a method by adding optional arguments
|
||||||
|
# or changing parameter names. This is still a bit dubious but at
|
||||||
|
# least it won't cause isinstance() to return an incorrect result.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
from abc import ABCMeta, abstractmethod
|
from abc import ABCMeta, abstractmethod
|
||||||
|
|
||||||
__all__ = ["Number", "Complex", "Real", "Rational", "Integral"]
|
__all__ = ["Number", "Complex", "Real", "Rational", "Integral"]
|
||||||
|
|
Loading…
Reference in a new issue