I didn't understand this line of the code below. This looks like a weird syntax to me.
super(CustomError, self).__init__(message, base_message, args)
class CustomError(Exception):
    """
    Abstract Base class for all exceptions raised in this ecosystem.
    """
    def __init__(self, message, base_message, *args):
        """
        :param message:
            Message to be displayed to user.
        :param base_message:
            Message to be passed to base class.
        :param args:
            Arguments to be passed to CustomError object.
        """
        super(CustomError, self).__init__(message, base_message, args)
Can someone please help me understand what this is doing internally? And what is the purpose of base_message and args. 
 
     
    