summaryrefslogtreecommitdiff
path: root/pylint
diff options
context:
space:
mode:
authorClaudiu Popa <pcmanticore@gmail.com>2019-05-19 10:02:52 +0200
committerClaudiu Popa <pcmanticore@gmail.com>2019-05-19 10:04:43 +0200
commitb488ce54e30762d81c9a7eb5c43ed904ee91cf2c (patch)
treee43fe3b8b169973a69efc38fdab2cc6ffc315c0a /pylint
parenteb3761504b86d6caf06feae2072f00f846e70435 (diff)
downloadpylint-git-b488ce54e30762d81c9a7eb5c43ed904ee91cf2c.tar.gz
Exclude ``__dict__`` from ``attribute-defined-outside-init``
Close #2909
Diffstat (limited to 'pylint')
-rw-r--r--pylint/checkers/classes.py3
-rw-r--r--pylint/test/functional/attribute_defined_outside_init.py5
2 files changed, 8 insertions, 0 deletions
diff --git a/pylint/checkers/classes.py b/pylint/checkers/classes.py
index d75107136..604b8ef45 100644
--- a/pylint/checkers/classes.py
+++ b/pylint/checkers/classes.py
@@ -823,6 +823,9 @@ a metaclass class method.",
# check if any method attr is defined in is a defining method
if any(node.frame().name in defining_methods for node in nodes):
continue
+ # Exclude `__dict__` as it is already defined.
+ if attr == "__dict__":
+ continue
# check attribute is defined in a parent's __init__
for parent in cnode.instance_attr_ancestors(attr):
diff --git a/pylint/test/functional/attribute_defined_outside_init.py b/pylint/test/functional/attribute_defined_outside_init.py
index 826b5d68b..ab5cf5f19 100644
--- a/pylint/test/functional/attribute_defined_outside_init.py
+++ b/pylint/test/functional/attribute_defined_outside_init.py
@@ -60,3 +60,8 @@ class Mixin(object):
"""Don't emit attribute-defined-outside-init for mixin classes."""
if self.defined_already: # pylint: disable=access-member-before-definition
self.defined_already = None
+
+
+class F:
+ def func(self):
+ self.__dict__ = {'foo': 'bar'}