def visit_classdef(self, node: nodes.ClassDef) -> None: """Visit an astroid.Class node. * set the locals_type and instance_attrs_type mappings * set the implements list and build it * optionally tag the node with a unique id """ if hasattr(node, "locals_type"): return node.locals_type = collections.defaultdict(list) if self.tag: node.uid = self.generate_id() # resolve ancestors for baseobj in node.ancestors(recurs=False): specializations = getattr(baseobj, "specializations", []) specializations.append(node) baseobj.specializations = specializations # resolve instance attributes node.instance_attrs_type = collections.defaultdict(list) for assignattrs in node.instance_attrs.values(): for assignattr in assignattrs: if not isinstance(assignattr, nodes.Unknown): self.handle_assignattr_type(assignattr, node) # resolve implemented interface try: node.implements = list(interfaces(node, self.inherited_interfaces)) except astroid.InferenceError: node.implements = []
def visit_classdef(self, node: nodes.ClassDef) -> None: """Visit an astroid.Class node. * set the locals_type and instance_attrs_type mappings * set the implements list and build it * optionally tag the node with a unique id """ if hasattr(node, "locals_type"): return node.locals_type = collections.defaultdict(list) if self.tag: node.uid = self.generate_id() # resolve ancestors for baseobj in node.ancestors(recurs=False): specializations = getattr(baseobj, "specializations", []) specializations.append(node) baseobj.specializations = specializations # resolve instance attributes node.instance_attrs_type = collections.defaultdict(list) for assignattrs in tuple(node.instance_attrs.values()): for assignattr in assignattrs: if not isinstance(assignattr, nodes.Unknown): self.handle_assignattr_type(assignattr, node) # resolve implemented interface try: ifaces = interfaces(node) if ifaces is not None: node.implements = list(ifaces) if node.implements: # TODO: 3.0: Remove support for __implements__ warnings.warn( "pyreverse will drop support for resolving and displaying implemented interfaces in pylint 3.0. " "The implementation relies on the '__implements__' attribute proposed in PEP 245, which was rejected " "in 2006.", DeprecationWarning, ) else: node.implements = [] except astroid.InferenceError: node.implements = []