Seite 1 von 1

Einmalige Methodenaufrufe

Verfasst: Samstag 2. August 2014, 14:54
von Goswin
Ich baue manchmal Konstruktormethoden, die nur ein einziges Mal aufgerufen werden sollen, da nur eine einzige Instanz der damit gebauten Klasse sinnvoll ist. Damit ich sie nicht ungewollt indirekt ein zweites Mal aufrufe, gebe ich der erstellten Instanz meist denselben Namen wie der Methode; damit wäre die Methode "weg vom Fenster" und kann nie wieder aufgerufen werden.

Ist so eine Vorgehensweise in Ordnung oder hat sie ungeahnte Seiteneffekte?

Re: Einmalige Methodenaufrufe

Verfasst: Samstag 2. August 2014, 15:12
von BlackJack
@Goswin: Das klingt schräg und verwirrend. Man weiss dann nicht was der Name eigentlich bedeutet, solange man nicht weiss ob der Aufruf schon passiert ist oder nicht.

Re: Einmalige Methodenaufrufe

Verfasst: Samstag 2. August 2014, 16:02
von EyDu
Wenn du nur eine Instanz haben willst, dann bietet sich vielleicht das Borg-Pattern an. Ansonsten kannst du es für Funktionen natürlich auch explizit machen:

Code: Alles auswählen

class AlreadyCalledError(Exception):
    pass


def once(func):
    func._lock = threading.Lock()
    func._called = False

    def wrapper(*args, **kwds):
        with func._lock:
            if func._called:
                raise AlreadyCalledError

            try:
                return func(*args, **kwds)
            finally:
                func._called = True

    return wrapper
Wie sieht denn dein genauer Anwendungsfall aus? Möglicherweise kann man dann konkretere Aussagen treffen.

Re: Einmalige Methodenaufrufe

Verfasst: Samstag 2. August 2014, 16:07
von /me
Goswin hat geschrieben:Ich baue manchmal Konstruktormethoden, die nur ein einziges Mal aufgerufen werden sollen, da nur eine einzige Instanz der damit gebauten Klasse sinnvoll ist.
Python hat Singletons schon eingebaut. Ein Modul kannst du problemlos als Singleton verwenden.

Re: Einmalige Methodenaufrufe

Verfasst: Samstag 2. August 2014, 17:55
von Goswin
Vielen Dank für eure Antworten! :) Ich probiere dann mal einiges aus.

Re: Einmalige Methodenaufrufe

Verfasst: Sonntag 3. August 2014, 08:55
von Hyperion
Zu dem Thema vielleicht noch ein Link: http://lucumr.pocoo.org/2009/7/24/singl ... in-python/