[Python-ideas] IntFlags

Luciano Ramalho luciano at ramalho.org
Thu Mar 5 17:15:58 CET 2015


I like the IntFlags concept, as long as it's clearly separated from
IntEnum -- it seems that's the consensus now.

I don't like the name IntFlags: BitFlags makes more sense to me, since
the key feature is supporting bitwise operators.

Calling it BitFlags has the additional advantage of making it very
clear that it's not closely related to IntEnum.

Best,

Luciano

On Tue, Mar 3, 2015 at 12:52 PM, Serhiy Storchaka <storchaka at gmail.com> wrote:
> Enum and IntEnum classes allow constants to have nice str() and repr()
> representations.
>
>>>> socket.AF_INET
> <AddressFamily.AF_INET: 2>
>>>> socket.socket()
> <socket.socket fd=3, family=AddressFamily.AF_INET,
> type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 0)>
>
> But when integer constants are flags that should be ORed, IntEnum doesn't
> help, because the result of bitwise OR of two IntEnum instances is int, and
> this value can't be represented as IntEnum.
>
> We need new type IntFlags. It is like IntEnum, but has differences:
>
> 1. The value of an instance should be not limited to the set of predefined
> constants. It can be a combination of predefined constants or even arbitrary
> integer.
>
> 2. The result of "|", "&" and "~" operators for IntFlags arguments should be
> an instance of the same IntFlags subclass.
>
> 3. It should have nice str() and repr().
>
>>>> print(stat.S_IROTH | stat.S_IWOTH)
> stat.S_IROTH|stat.S_IWOTH
>>>> stat.S_IROTH | stat.S_IWOTH
> <StatFlags.S_IROTH|S_IWOTH: 6>
>
> Any thoughts?
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/



-- 
Luciano Ramalho
Twitter: @ramalhoorg

Professor em: http://python.pro.br
Twitter: @pythonprobr


More information about the Python-ideas mailing list