Defining an empty __init__ as an abstract method is not very useful.
Instead, make A inherit from ABC (ABstract Class), and use @abstractmethod decorator on methods that really need to be implemented by the user.
from abc import ABC, abstractmethod
class A(ABC):
@abstractmethod
def cool_method(self):
raise NotImplemented
In that way, you would effectively not be able to instantiate A, and at the same time, you avoid the warning. Also consider that the default __init__ method for A when not implemented, would be something along the lines of:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
So additionally, it has the advantage that it respects the mro, if you later want to use A in a multiple inheritance setup, you will not run into problems.