mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	gh-93250: [Enum] Change IntEnum boundary to KEEP for backwards compatibility (GH-93302)
In previous versions of Python if an IntEnum member was combined with another integer type value using a bit-wise operation, the resulting value would still be the IntEnum type. This change restores that behavior.
This commit is contained in:
		
							parent
							
								
									711eda7dec
								
							
						
					
					
						commit
						70cfe56caf
					
				
					 2 changed files with 11 additions and 3 deletions
				
			
		|  | @ -1572,7 +1572,7 @@ def __invert__(self): | |||
|     __rxor__ = __xor__ | ||||
| 
 | ||||
| 
 | ||||
| class IntFlag(int, ReprEnum, Flag, boundary=EJECT): | ||||
| class IntFlag(int, ReprEnum, Flag, boundary=KEEP): | ||||
|     """ | ||||
|     Support for integer-based Flags | ||||
|     """ | ||||
|  |  | |||
|  | @ -3353,7 +3353,10 @@ def test_invert(self): | |||
|         self.assertIs((Open.WO|Open.CE) & ~Open.WO, Open.CE) | ||||
| 
 | ||||
|     def test_boundary(self): | ||||
|         self.assertIs(enum.IntFlag._boundary_, EJECT) | ||||
|         self.assertIs(enum.IntFlag._boundary_, KEEP) | ||||
|         class Simple(IntFlag, boundary=KEEP): | ||||
|             SINGLE = 1 | ||||
|         # | ||||
|         class Iron(IntFlag, boundary=STRICT): | ||||
|             ONE = 1 | ||||
|             TWO = 2 | ||||
|  | @ -3372,7 +3375,6 @@ class Space(IntFlag, boundary=EJECT): | |||
|             EIGHT = 8 | ||||
|         self.assertIs(Space._boundary_, EJECT) | ||||
|         # | ||||
|         # | ||||
|         class Bizarre(IntFlag, boundary=KEEP): | ||||
|             b = 3 | ||||
|             c = 4 | ||||
|  | @ -3389,6 +3391,12 @@ class Bizarre(IntFlag, boundary=KEEP): | |||
|         self.assertEqual(list(Bizarre), [Bizarre.c]) | ||||
|         self.assertIs(Bizarre(3), Bizarre.b) | ||||
|         self.assertIs(Bizarre(6), Bizarre.d) | ||||
|         # | ||||
|         simple = Simple.SINGLE | Iron.TWO | ||||
|         self.assertEqual(simple, 3) | ||||
|         self.assertIsInstance(simple, Simple) | ||||
|         self.assertEqual(repr(simple), '<Simple.SINGLE|<Iron.TWO: 2>: 3>') | ||||
|         self.assertEqual(str(simple), '3') | ||||
| 
 | ||||
|     def test_iter(self): | ||||
|         Color = self.Color | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Ethan Furman
						Ethan Furman