pylint/checkers/classes.py
def _check_bases_classes(self, node):
        """check that the given class node implements abstract methods from
        base classes
        """

        def is_abstract(method):
            return method.is_abstract(pass_is_abstract=False)

        # check if this class abstract
        if class_is_abstract(node):
            return

        methods = sorted(
            unimplemented_abstract_methods(node, is_abstract).items(),
            key=lambda item: item[0],
        )
        for name, method in methods:
            owner = method.parent.frame()
            if owner is node:
                continue
            # owner is not this class, it must be a parent class
            # check that the ancestor's method is not abstract
            if name in node.locals:
                # it is redefined as an attribute or with a descriptor
                continue
            self.add_message("abstract-method", node=node, args=(name, owner.name))
def _check_bases_classes(self, node):
        """check that the given class node implements abstract methods from
        base classes
        """

        def is_abstract(method):
            return method.is_abstract(pass_is_abstract=False)

        # check if this class abstract
        if class_is_abstract(node):
            return

        methods = sorted(
            unimplemented_abstract_methods(node, is_abstract).items(),
            key=lambda item: item[0],
        )
        for name, method in methods:
            owner = method.parent.frame()
            if owner is node:
                continue
            # owner is not this class, it must be a parent class
            # check that the ancestor's method is not abstract
            if name in node.locals:
                # it is redefined as an attribute or with a descriptor
                continue
            self.add_message("abstract-method", node=node, args=(name, owner.name))
def _check_bases_classes ( self , node ) : def is_abstract ( method ) : return method . is_abstract ( pass_is_abstract = False ) # check if this class abstract if class_is_abstract ( node ) : return methods = sorted ( unimplemented_abstract_methods ( node , is_abstract ) . items ( ) , key = lambda item : item [ 0 ] , ) for name , method in methods : owner = method . parent . frame ( ) if owner is node : continue # owner is not this class, it must be a parent class # check that the ancestor's method is not abstract if name in node . locals : # it is redefined as an attribute or with a descriptor continue self . add_message ( "abstract-method" , node = node , args = ( name , owner . name ) )
check that the given class node implements abstract methods from
        base classes
check that the given class node implements abstract methods from base classes