Слишком мало деталей, чтобы сказать что-то конкретное, но я попробую. Это зависит от сложности ситуации, но вы можете быть довольны простой параметризацией, которая включает / выключает функции:
class AccountRepository:
def constructor(have_feature_a, have_feature_b, etc):
# ...
def create_account(account):
if have_feature_a:
# do something special
# do common operations
if have_feature_b:
# do another special thing
Это прекрасно работает, если у вас мало таких функций и они делают очень маленькие вещи (представимые в нескольких строках кода) Если некоторые из этих функций тяжелые, они могут быть заключены в отдельный класс с известным интерфейсом. Это называется шаблоном Strategy . Затем эта стратегия вводится AccountRepository
как зависимость. Это известно как DI или Dependency Injection :
class AccountRepository:
def constructor(have_feature_a, feature_b_worker, etc):
# ...
def create_account(account):
if have_feature_a:
# do something special
# do common operations
if feature_b_worker != null:
# line bellow runs heavy code encapsulated in strategy
feature_b_worker.do_work(account)
Теперь вы можете даже иметь несколько реализаций FeatureB и использовать любую из них для разных случаев. Например. один для испытаний и один для производства.