С целью максимального повторного использования кода я создал довольно сложную иерархию классов для своего кода Python. Это выглядит примерно так:
class ElectionMethod
class IterativeMethod
class SNTV
...
class NonIterativeMethod
class OrderDependent
class CambridgeSTV
...
class OrderIndependent
class WIGM
class ERS97STV
...
class Recursive
class MeekSTV
...
Только листья иерархии классов когда-либо создаются в объектах. Это служит своей цели максимизации повторного использования кода, но сам код сложен (некоторые классы имеют около 20 методов) и, учитывая множество уровней, может потребоваться много времени, чтобы найти, где что-то реализовано.
Я попытался извлечь куски функциональности и поместить эту функциональность в отдельный объект, но я не нашел хорошего способа сделать это, так как почти вся функциональность зависит от общих данных. То есть, я могу переместить некоторый код в другой объект, но он должен обратиться к большой сложной иерархии, чтобы получить данные, которые ему нужны, чтобы в действительности это не инкапсуляция.
У кого-нибудь есть советы, как сделать это более управляемым?