Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
166 views
in Technique[技术] by (71.8m points)

python - Mypy doesn't throw an error when mixing booleans with integers

I am trying to use mypy to check a Python 3 project. In the example below, I want mypy to flag the construction of the class MyClass as an error, but it doesn't.

class MyClass:
    def __init__(self, i:int) -> None:
        pass

obj = MyClass(False)

Can anyone explain this, please? I.e. explain why mypy does not report an error?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

It’s because —?unfortunately! —?booleans in Python are integers. As in, bool is a subclass of int:

In [1]: issubclass(bool, int)
Out[1]: True

Hence the code typechecks, and False is a valid integer with value 0.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...