Aufruf __enter__ und __exit__ manuell

Habe ich gegoogelt aufrufen __enter__ manuell aber mit kein Glück. So stellen wir uns vor, ich habe MySQL connector-Klasse, die verwendet __enter__ und __exit__ Funktionen (ursprünglich mit with - Anweisung) eine Verbindung herstellen/trennen einer Datenbank.

Und wir haben eine Klasse, die verwendet 2 dieser Anschlüsse (zum Beispiel für Daten-sync). Hinweis: dies ist nicht mein real-life-Szenario, aber es scheint das einfachste Beispiel.

Einfachste Weg, um Sie alle zusammen arbeiten, ist die Klasse wie folgt aus:

class DataSync(object):

    def __init__(self):
        self.master_connection = MySQLConnection(param_set_1)
        self.slave_connection = MySQLConnection(param_set_2)

    def __enter__(self):
            self.master_connection.__enter__()
            self.slave_connection.__enter__()
            return self

    def __exit__(self, exc_type, exc, traceback):
            self.master_connection.__exit__(exc_type, exc, traceback)
            self.slave_connection.__exit__(exc_type, exc, traceback)

    # Some real operation functions

# Simple usage example
with DataSync() as sync:
    records = sync.master_connection.fetch_records()
    sync.slave_connection.push_records(records)

Q: Ist es okay (da ist etwas falsch) zu nennen __enter__/__exit__ manuell so?

Pylint 1.1.0 ausstellen nicht alle Warnungen auf diesem, noch habe ich gefunden, einen Artikel darüber (google-link in der beggining).

Ist und was über den Aufruf von:

try:
    # Db query
except MySQL.ServerDisconnectedException:
    self.master_connection.__exit__(None, None, None)
    self.master_connection.__enter__()
    # Retry

Ist das eine gute/schlechte Praxis? Warum?

  • Ich würde sagen, es ist gut, zu sehen, wie wir sind alle Erwachsene hier, oder Sie könnte so etwas wie ExitStack, der die Berufung für Sie.
  • Die __exit__ - Methode aufgerufen werden, die in der with-Anweisung auf jeden Fall nicht, so dass bei Aufruf dieser Methoden manuell, soweit ich weiß.
  • Ich habe ein Beispiel für die Verwendung Beispiel... In sofern der Fall ist (ich glaube,) haben Sie es zu nennen manuell.
InformationsquelleAutor Vyktor | 2014-10-29
Schreibe einen Kommentar