Методы с одинаковыми именами и разными аргументами - это запах кода.
"Метод do_something () имеет разные интерфейсы в подклассах: он принимает аргумент в дочерних классах 2 и 3, но не имеет аргумента в дочернем классе 1"
Ты не скажешь почему. Есть две веские причины, по которым
Почти любая другая причина указывает, что do_something
действительно отличается и должно иметь другое имя.
Если дочерний класс 1 имеет значение по умолчанию, то просто явно укажите значение по умолчанию в аргументах функции метода.
class ChildClass1( ParentClass ):
def do_something( argument_x= None )
....
Если дочерний класс 1 игнорирует значение, тогда просто игнорируйте значение. Не стой на своей голове, чтобы игнорировать vlaue.
class ChildClass1( ParentClass ):
def do_something( argument_x )
return True
Нет ничего волшебного в том, что функция полиморфного метода не использует все значения аргументов.
«аргументы do_something () имеют разные имена, чтобы подчеркнуть, что они имеют разные значения в дочерних классах 2 и 3».
Это просто плохой дизайн. Вы не можете иметь одну и ту же функцию метода с разными именами аргументов, потому что они делают разные вещи.
Наличие одного и того же имени функции метода просто неверно. Если это разные реализации схожих вещей, то аргументы будут иметь по существу одинаковые значения.
Если они на самом деле делают разные вещи, то у вас нет полиморфизма, и вы не должны давать этим методам одинаковые имена.
Когда методы в двух классах делают принципиально разные вещи - требуя разных аргументов с разными именами, чтобы сделать это очевидным - эти методы не должны иметь одинаковые имена. Имя перестает иметь значение, если оно не описывает, что на самом деле делает метод.
Примечание
Ваш код, кстати, будет работать на Python из-за утки. Пока имена методов совпадают, типы аргументов даже не должны приближаться к соответствию. Тем не менее, это действительно плохой дизайн, потому что существенные различия между методами очень велики.