arguments-differ / W0221#
Message emitted:
%s %s %r method
Description:
Used when a method has a different number of arguments than in the implemented interface or in an overridden method. Extra arguments with default values are ignored.
Problematic code:
class Drink:
def mix(self, fluid_one, fluid_two):
return fluid_one + fluid_two
class Cocktail(Drink):
def mix(self, fluid_one, fluid_two, alcoholic_fluid_one): # [arguments-differ]
return fluid_one + fluid_two + alcoholic_fluid_one
class Car:
tank = 0
def fill_tank(self, gas):
self.tank += gas
class Airplane(Car):
kerosene_tank = 0
def fill_tank(self, gas, kerosene): # [arguments-differ]
self.tank += gas
self.kerosene_tank += kerosene
Correct code:
class Drink:
def mix(self, fluid_one, fluid_two):
return fluid_one + fluid_two
class Cocktail(Drink):
def mix(self, fluid_one, fluid_two, alcoholic_fluid_one="Beer"):
return fluid_one + fluid_two + alcoholic_fluid_one
class Car:
tank = 0
def fill_tank(self, gas):
self.tank += gas
class Airplane:
tank = 0
kerosene_tank = 0
def fill_tank(self, gas, kerosene):
self.tank += gas
self.kerosene_tank += kerosene
Additional details:
argument-differ
denotes an issue with the Liskov Substitution Principle.
This means that the code in question violates an important design principle which does not have
one single solution. We recommend to search online for the best solution in your case.
To give some examples of potential solutions: - Add the argument to the parent class - Remove the inheritance completely - Add default arguments to the child class
Related links:
Created by the classes checker.