Sirius3 hat geschrieben:@Tholo: warum PyCharm da ein Property vorschlägt, wird wohl sein Geheimnis bleiben. Sobald man irgendwelchen komplizierten Sachen macht, z.B. Dateien liest, sollte man immer eine Methode schreiben.
Das bedeutet meine erste Herangehensweise war soweit korrekt und ich kann den Pycharm Vorschlag ignorieren?
Sirius3 hat geschrieben:
`read_json_keys` liest ja nichts, sondern holt sich nur aus dem vorhandenen Store die Schlüssel. Nenne das so, wie die Funktion die Du aufrufst: `keys`. Ebenso `read_json` -> `get`. `change_json_value` ist üblicherweise `set`. `len_dict` -> `len`, `search` -> `find`, obwohl, was soll da gefunden werden, wenn weder search noch find ein Argument hat. `drop` -> `remove`.
Es ist unsinnig, eine Konstante von selben Typ in diesen Typ zu verwandlen: "0" ist schon ein String, ebenso True schon ein `bool`. Warum sollte jede "1" in True umgewandelt werden?
Sirius3 hat geschrieben:`self.time` wird bei write_json benutzt und sonst nicht. Das sollte kein Attribut sein. Außerdem sollten alle Attribute schon in `__init__` angelegt werden.
set_json_value (vormals change_jsnon_value) bekommt den inhalt vom Configparser der "app.ini" Der KivyConfigparser speichert als 0 & 1 in der ini Datei. Der PHP Bot welcher dieses JSon braucht und nutzt benötigt die Angaben in bool mit true & false. Daher kann ich sicher sein das alle 0&1 Strings eigentlich Bool sein sollen. Was wäre die Alternative? Den KivyConfigparser dazu zu bringen Bool zu schreiben?
Sirius3 hat geschrieben:
Eine Methode sollte am besten entweder den Internen Zustand ändern, oder etwas zurückgeben, nicht beides: `update_json_keys` sollte daher keinen Rückgabewert haben. Die Vermischung von JsonHandling und JsonStore in SBPanelConfigJson ist verwirrend und mit verwirrend ist beim Programmieren immer gemeint, dass es einen Designfehler hat, der korrigiert werden sollte: `jpathhandle` ist ein JsonStore, und gleichzeitig ist `paneljs` auch ein JsonStore. `sbconfigjson` ist dan nwieder ein JsonHandling, das wiederum einen JsonStore enthält. Da sind also mindestens zwei JsonStores zu viel.
Meine Idee zur Zeit ist folgende. Die Klasse SBPAnelConfig bekommt ja paneljson (Die Json Datei welche gelesen,geschrieben und überarbeitet wird) übergeben. Die Informationen kommen aus einer anderen Json Datei ( die jsonpath, das zweite Json Beispiel im oberen Post).Wenn ich dich recht verstehe, müsste ich also eher die Superklasse JsonHandling mit der jsonpath aufrufen oder?
Wenn ich SBConfigpanel(paneljson) aufrufe, muss ich dann JsonHandling(jsonpath) in der Funktion update_json_keys machen...
Aber wie vermittel ich aus der Vererbung in die Superklasse mit anderer Attribut (Jsondatei). Könnest du mir ein Begriff dazu nennen?
Das Thema hat mir am Wochenende scho Stunden Knoten im Kopf gemacht.
Sirius3 hat geschrieben:
Nakte Excepts sollte man nicht benutzen, weil die wirklich jeden Fehler (auch manche Programmierfehler) abfangen. Benutze Konkrete Exceptions.
`eval` nicht benutzen. hier willst Du `float` verwenden. und wenn Du res nach `int` verwandelst, ist der Typ auf jeden Fall `int`. `isfloat` erwarte ich als Rückgabewert ein bool und nicht ein int. Zahlen niemals mit `is` vergleichen. Statt der while-Schleife möchtest Du auch eine for-Schleife benutzen. Der Aufruf von `isfloat` ist unsinnig, weil mit dem Rückgabewert nichts gemacht wird. Die continue sind alle überflüssig.
Ohh man..Da kopiert man mal code von google und fällt so auf den Hintern...
Die isfloat Geschichte ist noch nicht ausgereift. Ich bin da gerade noch dran eine Möglichkeit zu finden wie ich Bool, Float und String aus der Json Datei (key: "value ist meinßt string") zuordnen kann.
Code: Alles auswählen
def create_panel_value(self):
count = len(self.result)
for keylistitem in self.keylist:
reload_file_items = self.keylist.get(keylistitem)
self.changes.append(dict(reload_file_items))
while count is not 0:
createrkey = self.result.pop()
count = count - 1
Jetzt erwischt du mich voll! Wieso sollte dort eine For Schleife besser sein? Ich arbeite gerade von Oben nach Unten. Deute ich dich richtig, das eine bearbeitung von Unten nach Oben eher besser wäre?
Code: Alles auswählen
for createrkey in self.result.pop():
#createrkey = self.result.pop()
checkbool = self.sbconfigjson.get_json_value(createrkey)
Ohh jetzt Pfeift der Kopf. Sorry, ich glaub ich verstehe was du meinst aber komme gerade nicht auf die Lösung. Das muss ich mir in Ruhe anschauen.
Ich danke dir für deine Einschätzung! Mir raucht gehörig der Kopf aber ich denke ich habe weitgehend verstanden was du meinst.
Ausnahme die Geschichte mit den 2 Datei innerhalb der Vererbung und die While zur For Schleife. Aber ich denke das müssten wir in einem andern Post diskutieren, um nicht vom Thema abzukommen. Da ich die @property nun wieder gelöscht habe
Danke!