summaryrefslogtreecommitdiff
path: root/pylint
diff options
context:
space:
mode:
authorPierre Sassoulas <pierre.sassoulas@gmail.com>2022-09-16 10:20:43 +0200
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2022-09-16 16:00:37 +0200
commit69ba89eb6526fea7a5d23d8830e70dab5f879397 (patch)
treec2e77d8cc2662975e99ef236c412d16175cb2f51 /pylint
parentd2e9294a43dff62b35fa3b154de46d427f4bc8fd (diff)
downloadpylint-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.py13
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