Как я могу использовать статический метод в качестве параметра по умолчанию для шаблона разработки стратегии?

Я хочу сделать класс, который использует шаблон дизайна стратегии, подобный этому:

class C:

    @staticmethod
    def default_concrete_strategy():
        print("default")

    @staticmethod
    def other_concrete_strategy():
        print("other")

    def __init__(self, strategy=C.default_concrete_strategy):
        self.strategy = strategy

    def execute(self):
        self.strategy()

Это дает ошибку:

NameError: name 'C' is not defined

Заменаstrategy=C.default_concrete_strategy сstrategy=default_concrete_strategy будет работать, но, если оставить значение по умолчанию, переменная экземпляра стратегии будет объектом статического метода, а не вызываемым методом.

TypeError: 'staticmethod' object is not callable

Это будет работать, если я удалю@staticmethod декоратор, а есть ли другой способ? Я хочу, чтобы параметр по умолчанию самодокументировался, чтобы другие сразу увидели пример того, как включить стратегию.

Кроме того, есть ли лучший способ выставлять стратегии, а не как статические методы? Я не думаю, что реализация полных классов имеет здесь смысл.

Ответы на вопрос(1)

Ваш ответ на вопрос