Vedran Čačić added the comment:

> As a side note, I suspect there would be much less confusion with Flag if we 
> had an AutoEnum.

No, there would be _different_ confusion. :-P

Anyway, let's get back to the discussion. I am quite aware about what's the 
intended use, but you can't just assume people will know about it. In my view, 
you must do one of two things:

1) (at least in documentation, and preferably in the code by raising Exceptions 
at class definition time) forbid the use of Flags whose values are not either 
a) powers of two, or b) bitwise or of some already declared values

-or-

2) Specify and implement a robust algorithm for finding the "cover of bits" for 
a given numeric value. If the intended algorithm is really "pick the largest 
member value smaller than given value, subtract and repeat until 0 remains", 
then it should be said so in the documentation, and preferably some reasons 
given for the usage of that exact algorithm. ("it was easiest to implement" 
does not rank very high on my list.)

In other words, MyFlags(7) should either be illegal, or I should be able to 
interpret what it will be by reading the documentation. Leaving it unspecified 
is not acceptable IMO.

(In case it isn't clear: I'm for option 1. I _don't_ intend to write MyFlags 
ever in Python. But if I happen to write it unintentionally (e.g. if I forget 
to declare 2), I would like Python to tell me I'm doing something wrong.)

(But if you really want option 2 for some reason, that's ok too. I'm just 
saying I would like it specified, with a rationale if it's not too much of a 
problem.)

----------

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

Reply via email to