too-many-public-methods / R0904ΒΆ
Message emitted:
Too many public methods (%s/%s)
Description:
Used when class has too many public methods, try to reduce this to get a simpler (and so easier to use) class.
Problematic code:
class SpaceInvaders: # [too-many-public-methods]
def __init__(self):
pass
def fire_laser_beam(self):
pass
def deploy_shield(self):
pass
def launch_missile(self):
pass
def activate_super_laser(self):
pass
def summon_mothership(self):
pass
def destroy_planet(self):
pass
def teleport(self):
pass
def invoke_aliens(self):
pass
def invade_earth(self):
pass
def takeover_galaxy(self):
pass
Correct code:
class LaserBeam:
def __init__(self):
pass
def fire(self):
pass
def activate_super(self):
pass
def destroy_planet(self):
pass
class Shield:
def deploy(self):
pass
class Missile:
def launch(self):
pass
class SpaceInvaders:
def __init__(self):
self.laser = LaserBeam()
self.shield = Shield()
self.missile = Missile()
def summon_mothership(self):
pass
def destroy_planet(self):
pass
def teleport(self):
pass
def invoke_aliens(self):
pass
def invade_earth(self):
pass
def takeover_galaxy(self):
pass
Configuration file:
[main]
max-public-methods=7
Additional details:
Having too many public methods is an indication that you might not be respecting the Single-responsibility principle (S of SOLID).
The class should have only one reason to change, but in the example the spaceship has at least 4 persons that could ask for change to it (laser manager, shield manager, missile manager, teleportation officer...).
Related links:
Created by the design checker.