An empty method is generally considered bad practice and can lead to confusion, readability, and maintenance issues. Empty methods bring no functionality and are misleading to others as they might think the method implementation fulfills a specific and identified requirement.
There are several reasons for a method not to have a body:
No issue will be raised when the empty method is abstract and meant to be overridden in a subclass, i.e. it is decorated with
abc.abstractmethod, abc.abstractstaticmethod, abc.abstractclassmethod or abc.abstractproperty.
Note however that these methods should normally have a docstring explaining how subclasses should implement these methods.
import abc
class MyAbstractClass(abc.ABC):
@abc.abstractproperty
def myproperty(self):
pass
@abc.abstractclassmethod
def myclassmethod(cls):
pass
@abc.abstractmethod
def mymethod(self):
pass
@abc.abstractstaticmethod
def mystaticmethod():
pass
def shouldNotBeEmpty(): # Noncompliant - method is empty
pass
def notImplemented(): # Noncompliant - method is empty
pass
def emptyOnPurpose(): # Noncompliant - method is empty
pass
def shouldNotBeEmpty():
doSomething()
def notImplemented():
raise NotImplementedError("notImplemented() cannot be performed because ...")
def emptyOnPurpose():
pass # comment explaining why the method is empty
def emptyOnPurposeBis():
"""
Docstring explaining why this function is empty.
"""