mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Add more tests to the descriptor howto guide (GH-23506) (GH-23510)
This commit is contained in:
		
							parent
							
								
									9d2c2a8e3b
								
							
						
					
					
						commit
						0aedcff34c
					
				
					 1 changed files with 25 additions and 4 deletions
				
			
		|  | @ -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 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Miss Islington (bot)
						Miss Islington (bot)