[Python-ideas] constant/enum type in stdlib (original) (raw)

Antoine Pitrou solipsis at pitrou.net
Wed Jan 30 17:23:10 CET 2013


Le Wed, 30 Jan 2013 15:16:49 +0000, Michael Foord <fuzzyman at gmail.com> a écrit :

Being an int subclass (and possibly optionally a strs subclass) is a requirement if any adopted Enum is to be used within the standard library in places where integers are currently used as "poor man's enums". I also don't think flufl.enum supports flag enums (ones that can be OR'd together), right?

If a flexible solution is desired (with either int or str subclassing, various numbering schemes), may I suggest another kind of syntax:

class ErrorFlag(Enum): type = 'symbolic' names = ('strict', 'ignore', 'replace')

class SeekFlag(Enum): type = 'sequential' names = ('SET', 'CUR', 'END')

class TypeFlag(Enum): type = 'bitmask' names = ('HEAPTYPE', 'HAS_GC', 'INT_SUBCLASS')

ErrorFlag.ignore ErrorFlag.ignore ErrorFlag.ignore == 'ignore' True ErrorFlag('ignore') ErrorFlag.ignore isinstance(ErrorFlag.ignore, str) True isinstance(ErrorFlag.ignore, int) False ErrorFlag(0) [...] ValueError: invalid value for <class 'enum.ErrorFlag'>: 0

SeekFlag('SET') SeekFlag.SET SeekFlag('SET') + 0 0 SeekFlag(0) SeekFlag.SET isinstance(SeekFlag.CUR, int) True isinstance(SeekFlag.CUR, str) False

TypeFlag(1) TypeFlag.HEAPTYPE TypeFlag(2) TypeFlag.HAS_GC TypeFlag.HASGC | TypeFlag.INTSUBCLASS 6

Regards

Antoine.



More information about the Python-ideas mailing list