Terry Reedy wrote:
Oktay Şafak wrote:

That's what I'm trying to say: it would be more meaningful if int.__eq__ did a boolean comparison when the other operand is a boolean.

For that to be done, int would have to know about its subclass, which generally is bad design.

Good point, but of course it can be done without making the int type know about the specifics of its subclass.


The reason is that when someone writes (-1 == True) he is clearly, definitely, absolutely asking for a boolean comparison, not a numerical one.

I would say that the person does not understand Python and that the code is probably buggy.

 > As I said before, this is  weird code;

It is a bad idea to accommodate the language and interpreter to weird code which should never be written.

Again, good point. Agreed.


Well, I agree that explicit is better than implicit: when one wants to use the numerical values of True or False, he should make it explicit and use int(True) or int(False).

The reason to make bool a subclass of int is to avoid having to do that. You do not have to like this fact of Python but it has been decided and will not change.

 > We never write counter += True, for example.

But you might write counter += name, where you know name is bound to a bool. As I said, issubclass(bool, int) just so one would not have to write counter += int(name).

OK, my fault. Arithmetical operations was not my point, I was just trying to talk about integer values of True and False in an equality comparison context with other numbers. Of course the fact that issubclass(bool, int) is very handy in calculations like that.


If you want to cast an object to a boolean, use bool() on it.

Well, I can tell you in response that if you are interested in a boolean's *integer* value, than make it explicit and use int(True).

A Python bool *is* an int already: isinstance(True, int) returns True!

I know, you don't need to shout. What I was trying to say is that using the integer value of a boolean *in a comparison with a number* doesn't make much sense *to me*. I am not trying to change Python or whatever, I am extremely pleased with it as it is. But that doesn't mean I like each and every decision that has gone into it. Like everybody else, there are things that doesn't quite fit in for me and I am trying to understand better. I just came across this behavior while trying something in the interpreter and wanted to discuss with people more knowledgeable than myself. Please keep calm!


Oktay
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to