__str__ und file.write
Verfasst: Montag 9. Mai 2022, 09:24
Hallo Zusammen,
nach sehr langer Zeit will ich mich mal wieder mit Python beschäftigen. Schön, dass es meinen Account nach langer Zeit noch gibt. Hab dazu mal das "Quick Python Book" von Manning durchgelesen / rumprobiert / etc. Wollte nun mal etwas Praktisches machen (eine Stempeluhr, die meine Projektzeiten erfasst). Und stolpere gleich über __str__
Wenn ich in der Zeile
die Umwandlung nach str weg lasse, kommt die Meldung: TypeError: write() argument must be str, not MyEntry
Warum funktioniert __str__ nur bei print, nicht aber bei file.write?
Ursprünglich wollte ich my_entry_list mit json.dump speichern, hab aber dann gesehen, dass json keine Objektstrukturen speichern kann. Generell könnte ich das ganze ja auch "flach" ablegen, ganz ohne Objektruktur. Da ich aber später z.B. die Endzeit nochmal korrigieren / nachtragen möchte, erscheinen mir Objekte flexibler, als "manuelle" Änderungen in Listen / etc.
Danke und Gruß
nach sehr langer Zeit will ich mich mal wieder mit Python beschäftigen. Schön, dass es meinen Account nach langer Zeit noch gibt. Hab dazu mal das "Quick Python Book" von Manning durchgelesen / rumprobiert / etc. Wollte nun mal etwas Praktisches machen (eine Stempeluhr, die meine Projektzeiten erfasst). Und stolpere gleich über __str__
Code: Alles auswählen
from datetime import datetime
class MyEntry():
my_entry_list = []
FILE_PRAEFIX = '.txt'
def __init__(self, project, pr_date, pr_start, pr_stop = ""):
self.project = project
self.pr_date = pr_date
self.pr_start = pr_start
self.pr_stop = pr_stop
def __str__(self):
return "|".join([self.project, self.pr_date, self.pr_start, self.pr_stop])
@classmethod
def create_entry(cls, project):
pr_date = datetime.now().strftime('%Y-%m-%d')
pr_start = datetime.now().strftime('%H:%M:%S')
pr_stop = datetime.now().strftime('%H:%M:%S')
my_entry = cls(project, pr_date, pr_start, pr_stop)
cls.my_entry_list.append(my_entry)
@classmethod
def save_entries(cls, file_name):
full_file_name = file_name + cls.FILE_PRAEFIX
with open(full_file_name, "w", encoding="utf-8") as my_file:
for entry in cls.my_entry_list:
print(entry)
my_file.write(str(entry)) # <-- warum ist hier eine Umwandlung nach str nötig?
def main():
for index in range(5):
MyEntry.create_entry('P-21-001-' + str(index))
MyEntry.save_entries('test')
print('Wrote file...')
if __name__ == '__main__':
main()
Code: Alles auswählen
my_file.write(str(entry))
Warum funktioniert __str__ nur bei print, nicht aber bei file.write?
Ursprünglich wollte ich my_entry_list mit json.dump speichern, hab aber dann gesehen, dass json keine Objektstrukturen speichern kann. Generell könnte ich das ganze ja auch "flach" ablegen, ganz ohne Objektruktur. Da ich aber später z.B. die Endzeit nochmal korrigieren / nachtragen möchte, erscheinen mir Objekte flexibler, als "manuelle" Änderungen in Listen / etc.
Danke und Gruß