@@ -296,23 +296,24 @@ class ClassNameCheck(BaseASTCheck):
296
296
N801 = "class name '{name}' should use CapWords convention"
297
297
N818 = "exception name '{name}' should be named with an Error suffix"
298
298
299
- def get_class_def (self , name , parents ):
299
+ @classmethod
300
+ def get_classdef (cls , name , parents ):
300
301
for parent in parents :
301
- for definition in parent .body :
302
- is_class_definition = isinstance (definition , ast .ClassDef )
303
- if is_class_definition and definition . name == name :
304
- return definition
305
-
306
- def superclass_names (self , name , parents ):
307
- class_ids = set ()
308
- class_def = self . get_class_def (name , parents )
309
- if not class_def :
310
- return class_ids
311
- for base in class_def .bases :
312
- if hasattr (base , "id" ) :
313
- class_ids .add (base .id )
314
- class_ids .update (self .superclass_names (base .id , parents ))
315
- return class_ids
302
+ for node in parent .body :
303
+ if isinstance (node , ast .ClassDef ) and node . name == name :
304
+ return node
305
+
306
+ @ classmethod
307
+ def superclass_names (cls , name , parents , _names = None ):
308
+ names = _names or set ()
309
+ classdef = cls . get_classdef (name , parents )
310
+ if not classdef :
311
+ return names
312
+ for base in classdef .bases :
313
+ if isinstance (base , ast . Name ) and base . id not in names :
314
+ names .add (base .id )
315
+ names .update (cls .superclass_names (base .id , parents , names ))
316
+ return names
316
317
317
318
def visit_classdef (self , node , parents , ignore = None ):
318
319
name = node .name
0 commit comments