Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7417622

Browse files
asottileserhiy-storchaka
authored andcommitted
bpo-35733: Make isinstance(ast.Constant(boolean), ast.Num) be false. (GH-11547)
1 parent 39ed289 commit 7417622

3 files changed

Lines changed: 13 additions & 1 deletion

File tree

Lib/ast.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,10 @@ def __instancecheck__(cls, inst):
346346
except AttributeError:
347347
return False
348348
else:
349-
return isinstance(value, _const_types[cls])
349+
return (
350+
isinstance(value, _const_types[cls]) and
351+
not isinstance(value, _const_types_not.get(cls, ()))
352+
)
350353
return type.__instancecheck__(cls, inst)
351354

352355
def _new(cls, *args, **kwargs):
@@ -384,3 +387,6 @@ def __new__(cls, *args, **kwargs):
384387
NameConstant: (type(None), bool),
385388
Ellipsis: (type(...),),
386389
}
390+
_const_types_not = {
391+
Num: (bool,),
392+
}

Lib/test/test_ast.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,12 +411,16 @@ def test_isinstance(self):
411411
self.assertFalse(isinstance(ast.Str('42'), ast.Bytes))
412412
self.assertFalse(isinstance(ast.Num(42), ast.NameConstant))
413413
self.assertFalse(isinstance(ast.Num(42), ast.Ellipsis))
414+
self.assertFalse(isinstance(ast.NameConstant(True), ast.Num))
415+
self.assertFalse(isinstance(ast.NameConstant(False), ast.Num))
414416

415417
self.assertFalse(isinstance(ast.Constant('42'), ast.Num))
416418
self.assertFalse(isinstance(ast.Constant(42), ast.Str))
417419
self.assertFalse(isinstance(ast.Constant('42'), ast.Bytes))
418420
self.assertFalse(isinstance(ast.Constant(42), ast.NameConstant))
419421
self.assertFalse(isinstance(ast.Constant(42), ast.Ellipsis))
422+
self.assertFalse(isinstance(ast.Constant(True), ast.Num))
423+
self.assertFalse(isinstance(ast.Constant(False), ast.Num))
420424

421425
self.assertFalse(isinstance(ast.Constant(), ast.Num))
422426
self.assertFalse(isinstance(ast.Constant(), ast.Str))
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
``ast.Constant(boolean)`` no longer an instance of :class:`ast.Num`. Patch by Anthony
2+
Sottile.

0 commit comments

Comments
 (0)