Wie kann ich eine statische Methode als Standardparameter für das Strategieentwurfsmuster verwenden?

Ich möchte eine Klasse erstellen, die ein Strategieentwurfsmuster ähnlich dem folgenden verwendet:

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()

Dies gibt den Fehler:

NameError: name 'C' is not defined

Ersetzenstrategy=C.default_concrete_strategy ,mitstrategy=default_concrete_strategy funktioniert, aber standardmäßig ist die Strategieinstanzvariable eher ein statisches Methodenobjekt als eine aufrufbare Methode.

TypeError: 'staticmethod' object is not callable

Es wird funktionieren, wenn ich das entferne@staticmethod Dekorateur, aber gibt es einen anderen Weg? Ich möchte, dass der Standardparameter selbst dokumentiert wird, damit andere sofort ein Beispiel für das Einfügen einer Strategie sehen.

Gibt es auch eine bessere Möglichkeit, Strategien zu offenbaren als statische Methoden? Ich denke nicht, dass die Implementierung vollständiger Klassen hier Sinn macht.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage