diff options
author | Anthony Sottile <asottile@umich.edu> | 2019-01-18 19:30:28 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2019-01-18 19:30:28 (GMT) |
commit | 74176226179ed56ad1c910bec5c4100e72ab4e84 (patch) | |
tree | f389c2d62a2852f04f969dba54edd6d93eb974d2 /Lib | |
parent | 39ed289a3511d2e9bf0950a9d5dc53c8194f61b9 (diff) | |
download | cpython-74176226179ed56ad1c910bec5c4100e72ab4e84.zip cpython-74176226179ed56ad1c910bec5c4100e72ab4e84.tar.gz cpython-74176226179ed56ad1c910bec5c4100e72ab4e84.tar.bz2 |
bpo-35733: Make isinstance(ast.Constant(boolean), ast.Num) be false. (GH-11547)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/ast.py | 8 | ||||
-rw-r--r-- | Lib/test/test_ast.py | 4 |
2 files changed, 11 insertions, 1 deletions
@@ -346,7 +346,10 @@ class _ABC(type): except AttributeError: return False else: - return isinstance(value, _const_types[cls]) + return ( + isinstance(value, _const_types[cls]) and + not isinstance(value, _const_types_not.get(cls, ())) + ) return type.__instancecheck__(cls, inst) def _new(cls, *args, **kwargs): @@ -384,3 +387,6 @@ _const_types = { NameConstant: (type(None), bool), Ellipsis: (type(...),), } +_const_types_not = { + Num: (bool,), +} diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index 897e705..4bf77ff 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -411,12 +411,16 @@ class AST_Tests(unittest.TestCase): self.assertFalse(isinstance(ast.Str('42'), ast.Bytes)) self.assertFalse(isinstance(ast.Num(42), ast.NameConstant)) self.assertFalse(isinstance(ast.Num(42), ast.Ellipsis)) + self.assertFalse(isinstance(ast.NameConstant(True), ast.Num)) + self.assertFalse(isinstance(ast.NameConstant(False), ast.Num)) self.assertFalse(isinstance(ast.Constant('42'), ast.Num)) self.assertFalse(isinstance(ast.Constant(42), ast.Str)) self.assertFalse(isinstance(ast.Constant('42'), ast.Bytes)) self.assertFalse(isinstance(ast.Constant(42), ast.NameConstant)) self.assertFalse(isinstance(ast.Constant(42), ast.Ellipsis)) + self.assertFalse(isinstance(ast.Constant(True), ast.Num)) + self.assertFalse(isinstance(ast.Constant(False), ast.Num)) self.assertFalse(isinstance(ast.Constant(), ast.Num)) self.assertFalse(isinstance(ast.Constant(), ast.Str)) |