From 6b55d80bd9ba59e77e80cf3244f8b9018f8f969c Mon Sep 17 00:00:00 2001 From: Sylvain Th?nault Date: Thu, 15 Mar 2012 13:45:52 +0100 Subject: don't emit E0202 (attribute hiding a method) on @property methods. Closes #89092 --- checkers/classes.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'checkers/classes.py') diff --git a/checkers/classes.py b/checkers/classes.py index 60d20b6..847646e 100644 --- a/checkers/classes.py +++ b/checkers/classes.py @@ -254,7 +254,17 @@ a class method.'} continue self._check_signature(node, meth_node, 'overridden') break - # check if the method overload an attribute + if node.decorators: + for decorator in node.decorators.nodes: + if isinstance(decorator, astng.Getattr) and \ + decorator.attrname in ('getter', 'setter', 'deleter'): + # attribute affectation will call this method, not hiding it + return + if isinstance(decorator, astng.Name) and decorator.name == 'property': + # attribute affectation will either call a setter or raise + # an attribute error, anyway not hiding the function + return + # check if the method is hidden by an attribute try: overridden = klass.instance_attr(node.name)[0] # XXX args = (overridden.root().name, overridden.fromlineno) -- cgit v1.2.1