Add more tests to the descriptor howto guide (GH-23506)

This commit is contained in:
Raymond Hettinger 2020-11-25 01:54:24 -08:00 committed by GitHub
parent 4fedd7123e
commit 85c84920f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 25 additions and 4 deletions

View File

@ -170,7 +170,15 @@ the lookup or update:
An interactive session shows that all access to the managed attribute *age* is An interactive session shows that all access to the managed attribute *age* is
logged, but that the regular attribute *name* is not logged:: logged, but that the regular attribute *name* is not logged:
.. testcode::
:hide:
import logging, sys
logging.basicConfig(level=logging.INFO, stream=sys.stdout, force=True)
.. doctest::
>>> mary = Person('Mary M', 30) # The initial age update is logged >>> mary = Person('Mary M', 30) # The initial age update is logged
INFO:root:Updating 'age' to 30 INFO:root:Updating 'age' to 30
@ -256,7 +264,15 @@ we call :func:`vars` to look up the descriptor without triggering it:
>>> vars(vars(Person)['age']) >>> vars(vars(Person)['age'])
{'public_name': 'age', 'private_name': '_age'} {'public_name': 'age', 'private_name': '_age'}
The new class now logs access to both *name* and *age*:: The new class now logs access to both *name* and *age*:
.. testcode::
:hide:
import logging, sys
logging.basicConfig(level=logging.INFO, stream=sys.stdout, force=True)
.. doctest::
>>> pete = Person('Peter P', 10) >>> pete = Person('Peter P', 10)
INFO:root:Updating 'name' to 'Peter P' INFO:root:Updating 'name' to 'Peter P'
@ -433,7 +449,9 @@ Here's how the data validators can be used in a real class:
self.kind = kind self.kind = kind
self.quantity = quantity self.quantity = quantity
The descriptors prevent invalid instances from being created:: The descriptors prevent invalid instances from being created:
.. doctest::
>>> Component('Widget', 'metal', 5) # Blocked: 'Widget' is not all uppercase >>> Component('Widget', 'metal', 5) # Blocked: 'Widget' is not all uppercase
Traceback (most recent call last): Traceback (most recent call last):
@ -1227,7 +1245,10 @@ Now a new dictionary of unique keys can be constructed like this:
.. doctest:: .. doctest::
>>> Dict.fromkeys('abracadabra') >>> d = Dict.fromkeys('abracadabra')
>>> type(d) is Dict
True
>>> d
{'a': None, 'b': None, 'r': None, 'c': None, 'd': None} {'a': None, 'b': None, 'r': None, 'c': None, 'd': None}
Using the non-data descriptor protocol, a pure Python version of Using the non-data descriptor protocol, a pure Python version of