Ich bin mir im Moment ein wenig unsicher. Ich wollte mal ``@classmethod`` ausprobieren. Als Anwendung dafür habe ich den Zugriff auf einen in einer Textdatei gespeicherten Wert. Ich bin mir deshalb noch unsicher, da ich nicht weiß, ob man @classmethod überhaupt so verwenden soll.
Außerdem weiß ich jetzt auch nicht, ob ich den Klassennamen in diesem Fall so wie immer oder klein schreiben soll. Denn in dem Beispiel wird die Klasse ja nicht mehr wie gewohnt benutzt. -- Keine Instanz.
Ach ja, fast hätte ich es vergessen. Der Zweck dieser Übung ist, den Zugriff auf eine Textdatei, die nur einen Wert enthält, im gesamten Programm zu gewährleisten. Es soll verhindert werden, dass zwei Threads gleichzeitig die Datei zum Schreiben öffnen und sich dabei blockieren. Ich möchte die Zahl nicht im Speicher behalten, da diese kritisch ist und auch bei einem Absturz des Computers noch erhalten bleiben muss.
Code: Alles auswählen
import os
import threading
class letzte_tagab_id(object):
filename = os.path.abspath("letzte_tagab_id.txt")
lock = threading.Lock()
@classmethod
def get_id(cls):
cls.lock.acquire()
try:
if os.path.isfile(cls.filename):
f = file(cls.filename, "r")
try:
return int(f.readline().strip())
finally:
f.close()
else:
return 0
finally:
cls.lock.release()
@classmethod
def set_id(cls, new_id):
cls.lock.acquire()
try:
f = file(cls.filename, "w")
f.write(str(new_id))
f.close()
finally:
cls.lock.release()
#test
print letzte_tagab_id.get_id()
letzte_tagab_id.set_id(15)
print letzte_tagab_id.get_id()
Mich würde interessieren, was ihr von dieser Art der Verwendung haltet und wie ihr es besser machen würdet.
lg
Gerold