Marc Guetg added the comment:

One made-up use-case would be:

class LogLevel(Flags):
    start = auto()
    log1 = start | auto()
    log2 = start | auto()


def fun(flags, *args):
    if start in flags:
        # open log file

    if log1 in flags:
       # Log important thing 1

    if log2 in flags:
       # Log important thing 2
    
    if start in flags:
       # close log file


Alternatively the same could be achieved using the existing capabilities with:

class LogLevel(Flags):
     start = auto()
     _log1 = auto()
     log1 = start | _log1
     _log2 = auto()
     log2 = start | _log2

Which is less clear imho and could potentially a problem if somebody uses 
LogLevel._log2


Another alternative would be that within the function we would check for all 
cases. eg:

if (start in flags) or (log1 in flags) or (log2 in flags):

Which leads to less clear code and makes the code less maintainable when log3 
gets introduced. In the existing case we need to remember to change the if 
clause both when opening and closing the file. After the proposed change we 
only need to change the enum.

I'm sure there are more use-cases for it. The one I'm using it for is a bit 
more convoluted that's why I'm not presenting it here.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue29594>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to