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 <[email protected]>
<http://bugs.python.org/issue23591>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com