diff options
author | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2022-09-16 10:20:43 +0200 |
---|---|---|
committer | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2022-09-16 16:00:37 +0200 |
commit | 69ba89eb6526fea7a5d23d8830e70dab5f879397 (patch) | |
tree | c2e77d8cc2662975e99ef236c412d16175cb2f51 /pylint | |
parent | d2e9294a43dff62b35fa3b154de46d427f4bc8fd (diff) | |
download | pylint-git-69ba89eb6526fea7a5d23d8830e70dab5f879397.tar.gz |
[invalid-class-object] Fix crash when __class__ is defined with a tuple
Closes #7467
Diffstat (limited to 'pylint')
-rw-r--r-- | pylint/checkers/classes/class_checker.py | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/pylint/checkers/classes/class_checker.py b/pylint/checkers/classes/class_checker.py index 099b6897a..856f5722b 100644 --- a/pylint/checkers/classes/class_checker.py +++ b/pylint/checkers/classes/class_checker.py @@ -1560,7 +1560,18 @@ a metaclass class method.", def _check_invalid_class_object(self, node: nodes.AssignAttr) -> None: if not node.attrname == "__class__": return - inferred = safe_infer(node.parent.value) + if isinstance(node.parent, nodes.Tuple): + class_index = -1 + for i, elt in enumerate(node.parent.elts): + if hasattr(elt, "attrname") and elt.attrname == "__class__": + class_index = i + if class_index == -1: + # This should not happen because we checked that the node name + # is '__class__' earlier, but let's not be too confident here + return # pragma: no cover + inferred = safe_infer(node.parent.parent.value.elts[class_index]) + else: + inferred = safe_infer(node.parent.value) if ( isinstance(inferred, nodes.ClassDef) or inferred is astroid.Uninferable |