mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-31801: Enum: add _ignore_ as class option (#5237)
* bpo-31801: Enum: add _ignore_ as class option _ignore_ is a list, or white-space seperated str, of names that will not be candidates for members; these names, and _ignore_ itself, are removed from the final class. * bpo-31801: Enum: add documentation for _ignore_ * bpo-31801: Enum: remove trailing whitespace * bpo-31801: Enum: fix bulleted list format * bpo-31801: add version added for _ignore_
This commit is contained in:
parent
579e0b80b9
commit
a4b1bb4801
4 changed files with 79 additions and 2 deletions
|
@ -8,7 +8,12 @@ from enum import Enum, IntEnum, EnumMeta, Flag, IntFlag, unique, auto
|
|||
from io import StringIO
|
||||
from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL
|
||||
from test import support
|
||||
from datetime import timedelta
|
||||
|
||||
try:
|
||||
import threading
|
||||
except ImportError:
|
||||
threading = None
|
||||
|
||||
# for pickle tests
|
||||
try:
|
||||
|
@ -1547,6 +1552,34 @@ class TestEnum(unittest.TestCase):
|
|||
self.assertEqual(round(Planet.EARTH.surface_gravity, 2), 9.80)
|
||||
self.assertEqual(Planet.EARTH.value, (5.976e+24, 6.37814e6))
|
||||
|
||||
def test_ignore(self):
|
||||
class Period(timedelta, Enum):
|
||||
'''
|
||||
different lengths of time
|
||||
'''
|
||||
def __new__(cls, value, period):
|
||||
obj = timedelta.__new__(cls, value)
|
||||
obj._value_ = value
|
||||
obj.period = period
|
||||
return obj
|
||||
_ignore_ = 'Period i'
|
||||
Period = vars()
|
||||
for i in range(13):
|
||||
Period['month_%d' % i] = i*30, 'month'
|
||||
for i in range(53):
|
||||
Period['week_%d' % i] = i*7, 'week'
|
||||
for i in range(32):
|
||||
Period['day_%d' % i] = i, 'day'
|
||||
OneDay = day_1
|
||||
OneWeek = week_1
|
||||
OneMonth = month_1
|
||||
self.assertFalse(hasattr(Period, '_ignore_'))
|
||||
self.assertFalse(hasattr(Period, 'Period'))
|
||||
self.assertFalse(hasattr(Period, 'i'))
|
||||
self.assertTrue(isinstance(Period.day_1, timedelta))
|
||||
self.assertTrue(Period.month_1 is Period.day_30)
|
||||
self.assertTrue(Period.week_4 is Period.day_28)
|
||||
|
||||
def test_nonhash_value(self):
|
||||
class AutoNumberInAList(Enum):
|
||||
def __new__(cls):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue