Python: Änderung in der Klasse Tracking es am Ende zu sparen

stimmen
2
class A(object):
    def __init__(self):
        self.db = create_db_object()

    def change_Db_a(self):
         self.db.change_something()
         self.db.save()

    def change_db_b(self):
         self.db.change_anotherthing()
         self.db.save()

Ich erhalte Objekt aus der Datenbank, ich habe es in mehrere Funktion zu ändern und wieder zu speichern. die langsam ist, weil es Datenbank auf jedem Funktionsaufruf trifft. ist es so etwas wie Deconstructor, wo ich das Datenbankobjekt speichern kann, so dass ich es nicht für jeden Funktionsaufruf speichern müssen und keine Zeit verschwenden.

Veröffentlicht am 24/07/2010 um 07:03
vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
1

Sie können eine Definition del Methode.

def __del__(self):
    self.db.save()

Aber beachten Sie, dass diese Datenkonsistenz verletzt.

Beantwortet am 24/07/2010 um 07:07
quelle vom benutzer

stimmen
3

Sie nicht auf das verlassene __del__Methode für das Objekt zu speichern. Weitere Einzelheiten finden Sie in diesem Blog - Post .

Sie können die Verwendung verwenden Kontext - Management - Protokoll durch die Definition __enter__und __exit__Methoden:

class A(object):
    def __enter__(self):
        print 'enter'
        # create database object here (or in __init__)
        pass

    def __exit__(self, exc_type, exc_val, exc_tb):
        print 'exit'
        # save database object here

    # other methods

Verwenden Sie dann die withAnweisung , wenn Sie Ihr Objekt zu erstellen:

with A() as myobj:
    print 'inside with block'
    myobj.do_something()

Wenn Sie die Eingabe - withBlock, der A.__enter__wird Methode aufgerufen. Wenn Sie die Ausfahrt withBlock die __exit__Methode aufgerufen wird. Zum Beispiel mit dem Code sollte über die folgende Ausgabe sehen:

eingeben

innen mit Block

Ausfahrt

Hier weitere Informationen über die withAussage:

Beantwortet am 24/07/2010 um 07:16
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more