У меня есть пакет python, содержащий два подпакета:
my_package
sub_package_A
sub_package_B
Я хочу иметь возможность импортировать подпакеты индивидуально извне, как в
import my_package.sub_package_a
import my_package.sub_package_b
Теперь есть один класс, который требуется обоим подпакетам. Для согласованности класс должен отображаться в sub_package_A
как MyClassA
и в sub_package_B
как MyClassB
, но код для обоих идентичных 1: 1.
Уродливый, DRY -совместимый подход заключается в том, чтобы объединить два почти идентичных файла внутри каждого подпакета и повторить тонны кода:
my_package
sub_package_A
my_class_a.py # same content as my_class_b.py, but different class name
sub_package_B
my_class_b.py # same content as my_class_a.py, but different class name
Я мог бы также представить общий пакет, содержащий класс как обобщенный c прототип, а затем использовать наследование для создания спецификаций c копий:
my_package
common_package
my_class.py # contains the code for MyClass
sub_package_A
my_class_a.py # "class MyClassA(common.myclass): ..."
sub_package_B
my_class_b.py # "class MyClassB(common.myclass): ..."
Существуют ли какие-либо стандартные / рекомендуемые способы достижения моей цели?