
On 01/30/2013 08:23 AM, Antoine Pitrou wrote:
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')
This I like.
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.HAS_GC | TypeFlag.INT_SUBCLASS 6
This should be `TypeFlag.HEAPTYPE|HAS_GC` +1 ~Ethan~