Commit 74176226 authored by Anthony Sottile's avatar Anthony Sottile Committed by Serhiy Storchaka

bpo-35733: Make isinstance(ast.Constant(boolean), ast.Num) be false. (GH-11547)

parent 39ed289a
...@@ -346,7 +346,10 @@ class _ABC(type): ...@@ -346,7 +346,10 @@ class _ABC(type):
except AttributeError: except AttributeError:
return False return False
else: 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) return type.__instancecheck__(cls, inst)
def _new(cls, *args, **kwargs): def _new(cls, *args, **kwargs):
...@@ -384,3 +387,6 @@ _const_types = { ...@@ -384,3 +387,6 @@ _const_types = {
NameConstant: (type(None), bool), NameConstant: (type(None), bool),
Ellipsis: (type(...),), Ellipsis: (type(...),),
} }
_const_types_not = {
Num: (bool,),
}
...@@ -411,12 +411,16 @@ class AST_Tests(unittest.TestCase): ...@@ -411,12 +411,16 @@ class AST_Tests(unittest.TestCase):
self.assertFalse(isinstance(ast.Str('42'), ast.Bytes)) self.assertFalse(isinstance(ast.Str('42'), ast.Bytes))
self.assertFalse(isinstance(ast.Num(42), ast.NameConstant)) self.assertFalse(isinstance(ast.Num(42), ast.NameConstant))
self.assertFalse(isinstance(ast.Num(42), ast.Ellipsis)) 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.Num))
self.assertFalse(isinstance(ast.Constant(42), ast.Str)) self.assertFalse(isinstance(ast.Constant(42), ast.Str))
self.assertFalse(isinstance(ast.Constant('42'), ast.Bytes)) self.assertFalse(isinstance(ast.Constant('42'), ast.Bytes))
self.assertFalse(isinstance(ast.Constant(42), ast.NameConstant)) self.assertFalse(isinstance(ast.Constant(42), ast.NameConstant))
self.assertFalse(isinstance(ast.Constant(42), ast.Ellipsis)) 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.Num))
self.assertFalse(isinstance(ast.Constant(), ast.Str)) self.assertFalse(isinstance(ast.Constant(), ast.Str))
......
``ast.Constant(boolean)`` no longer an instance of :class:`ast.Num`. Patch by Anthony
Sottile.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment