mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	[3.9] bpo-42517: [Enum] deprecate private name members (GH-23722) (GH-23748)
private names will raise a DeprecationWarning; in 3.10 they will become normal attributes
This commit is contained in:
		
							parent
							
								
									6b2ed38509
								
							
						
					
					
						commit
						aba12b67c1
					
				
					 4 changed files with 51 additions and 0 deletions
				
			
		
							
								
								
									
										22
									
								
								Lib/enum.py
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								Lib/enum.py
									
										
									
									
									
								
							|  | @ -41,6 +41,19 @@ def _is_sunder(name): | |||
|             name[-2:-1] != '_' | ||||
|             ) | ||||
| 
 | ||||
| def _is_private(cls_name, name): | ||||
|     # do not use `re` as `re` imports `enum` | ||||
|     pattern = '_%s__' % (cls_name, ) | ||||
|     if ( | ||||
|             len(name) >= 5 | ||||
|             and name.startswith(pattern) | ||||
|             and name[len(pattern)] != '_' | ||||
|             and (name[-1] != '_' or name[-2] != '_') | ||||
|         ): | ||||
|         return True | ||||
|     else: | ||||
|         return False | ||||
| 
 | ||||
| def _make_class_unpicklable(cls): | ||||
|     """ | ||||
|     Make the given class un-picklable. | ||||
|  | @ -81,6 +94,14 @@ def __setitem__(self, key, value): | |||
| 
 | ||||
|         Single underscore (sunder) names are reserved. | ||||
|         """ | ||||
|         if _is_private(self._cls_name, key): | ||||
|             import warnings | ||||
|             warnings.warn( | ||||
|                     "private variables, such as %r, will be normal attributes in 3.10" | ||||
|                         % (key, ), | ||||
|                     DeprecationWarning, | ||||
|                     stacklevel=2, | ||||
|                     ) | ||||
|         if _is_sunder(key): | ||||
|             if key not in ( | ||||
|                     '_order_', '_create_pseudo_member_', | ||||
|  | @ -146,6 +167,7 @@ def __prepare__(metacls, cls, bases): | |||
|         metacls._check_for_existing_members(cls, bases) | ||||
|         # create the namespace dict | ||||
|         enum_dict = _EnumDict() | ||||
|         enum_dict._cls_name = cls | ||||
|         # inherit previous flags and _generate_next_value_ function | ||||
|         member_type, first_enum = metacls._get_mixins_(cls, bases) | ||||
|         if first_enum is not None: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Miss Islington (bot)
						Miss Islington (bot)