67

isinstance()次の場合に True を返す理由を説明してもらえますか? コードを書くとき、私は False を期待していました。

print isinstance(True, (float, int))
True

私の推測では、Python の内部サブクラス化は、float か int かに関係なく、ゼロと 1 として、両方ともブール値として使用されたときに評価されますが、正確な理由はわかりません。

このような状況を解決するための最もpythonicな方法は何でしょうか? 私は使用できますtype()が、ほとんどの場合、これはPythonicではないと見なされます。

4

6 に答える 6

5

メソッド解決の順序を確認し、そこからすべてのスーパークラスを見つけることができます。

>>> bool.__mro__
(<class 'bool'>, <class 'int'>, <class 'object'>)
于 2020-01-06T12:18:30.147 に答える
4

のみを確認したい場合int

if type(some_var) is int:
    return True

else:
    return False
于 2018-02-18T09:20:38.420 に答える