Как я могу использовать статический метод в качестве параметра по умолчанию для шаблона разработки стратегии?
Я хочу сделать класс, который использует шаблон дизайна стратегии, подобный этому:
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
декоратор, а есть ли другой способ? Я хочу, чтобы параметр по умолчанию самодокументировался, чтобы другие сразу увидели пример того, как включить стратегию.
Кроме того, есть ли лучший способ выставлять стратегии, а не как статические методы? Я не думаю, что реализация полных классов имеет здесь смысл.