Seite 1 von 1

Klassenaufbau für Bilanzkennzahlen ?

Verfasst: Freitag 21. September 2007, 09:38
von kaytec
Hallo !!

Ich möchte ein Programm zur Kennzahlenberechnung von Bilanzen schreiben und habe mal wieder Probleme mit den Klassen!

Soll die Klasse zur Berechnung der Bilanzkennzahlen eine eigene sein oder ein Teil der Klasse Bilanz.

Bei der Klasse Bilanzkennzahlen übergebe ich immer ein Jahr - oder ist es sinnvoll den ganzen Datensatz zu übergeben ? Dann müsste ich in der Klasse über eine Schleife auf die einzelnen Werte zugreifen. Das bekomme ich aber nicht so hin, da ich dies in der _init_ Zeile machen müsste - oder?

Sollte ich die Klassen ganz anders aufbauen ?

http://ubuntuusers.de/paste/15177/

Ein Datensatz der Klasse Bilanz sieht so aus:

Code: Alles auswählen

[2000, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
[2001, [3, 7, 9, 23, 89, 34, 89, 432, 89, 23]]
[2002, [35, 75, 95, 523, 589, 364, 859, 4352, 589, 423]]
gruß und dank frank

Verfasst: Freitag 21. September 2007, 10:22
von BlackJack
IMHO fangen die "Probleme" schon bei den grundlegenden Daten an. Die Datenstruktur ist suboptimal. Die Bilanzdaten wären in `Bilanz` wohl besser in einem Dictionary, das Jahreszahlen auf die Daten des Jahres abbildet, aufgehoben. Und die Daten sollten vielleicht auch besser ein eigenes Objekt statt einer Liste sein, dann spart man sich diese undurchsichtige Indexerei. `berechne_kennzahlen()` ist dann eine Methode auf so einem Jahresobjekt, wenn ich das richtig sehe.

Verfasst: Freitag 21. September 2007, 10:46
von kaytec
Danke BlackJack !

Das mit der dict() hate ich schon nur das Sortieren nach aufsteigenden jahreszahlen geht dann natürlch nicht mehr so einfach. Sollte eine dict dann so aussehen:

Code: Alles auswählen

 bilanz_daten = {{2001 :{anlage-vermoegen : 123, gesamt_kapital : 234, ...},
                 {2002 : {anlage..... :456, .....}}
gruß frank

Verfasst: Sonntag 23. September 2007, 11:00
von kaytec
Hallo !

Habe es mal mit einer Dictionary versucht.

http://ubuntuusers.de/paste/15255/

Ein Datensatz sieht so aus:
bilanz_daten = {2000, {'Gesamtvermoegen': 3, 'langfristiges Fremdkapital': 5, 'Forderungen': 8, 'Umlaufvermoegen': 1, 'kurzfristiges Fremdkapital': 6, 'Anlagevermoegen': 0, 'Eigenkapital': 3, 'Vorraete': 7, 'fluessige Mittel': 9, 'Fremdkapital': 10}}

gruß frank

Verfasst: Montag 24. September 2007, 22:29
von Joghurt
kaytec hat geschrieben:Das mit der dict() hate ich schon nur das Sortieren nach aufsteigenden jahreszahlen geht dann natürlch nicht mehr so einfach.
Doch:

Code: Alles auswählen

daten={2000: {"foo": "Bla", "bar": 42},
2001: {"foo": "blubb", "bar": 9}}

print sorted(daten.items()) # [(2000, {'foo': 'Bla', 'bar': 42}), (2001, {'foo': 'blubb', 'bar': 9})]

Verfasst: Mittwoch 26. September 2007, 21:04
von kaytec
Danke Joghurt !!

Bin schon einige Schritte weiter und jetzt an der graf. Oberfäche. Doch habe ich ein Problem mit dem Layout - Manager grid(). Ich versuche über eine Schleife meine Widgets zu löschen:

Code: Alles auswählen

 for label in self.label_anzeigen:
            label.grid_forget()
Dies funktioniert auch, doch mit der Zeit belastet es den Arbeitsspeicher - gibt es auch eine andere Möglichkeit die Widgets zu löschen ?

gruß frank

Verfasst: Donnerstag 27. September 2007, 05:24
von Zap
kaytec hat geschrieben:Habe es mal mit einer Dictionary versucht.

http://ubuntuusers.de/paste/15255/
Hi Kaytec, kurz 3 Sachen die mir zu deinem Paste aufgefallen sind.
  1. Du benutzt '''strings''' zum Dokumentieren. Dokumentieren tut man aber so: # ich bin Dokutext
  2. Du ziehst deinen Quellcode sehr stark auseinander da du sehr viele Leerzeilen drin hast. Wenn du das besser findest, ok. Ich finde aber das der Code dann nicht sehr angenehm zu lesen ist. Siehe zB die größe der letzten for-schleife.
  3. Eine Kleinigkeit: ebenfalls bei der letzten for-Schleife, hatte mich gewundert warum du 2 mal "kennzahlen = dict()" schreibst. Einmal am Anfang der for hätte doch gereicht.
Das zu den Sachen die mir spontan aufgefallen sind.

Gruß Zap

Verfasst: Donnerstag 27. September 2007, 08:30
von kaytec
Danke Zap !!!

Ich hatte mal # die verwendet und da wurde mir gesagt besser wären doc- string.
Das mit den Leerzeilen kann sein, doch ich hatte gedacht, dass es mehr Übersicht bringt. Die letzte for -Schleife wird noch grösser, denn ich benötige alle erzeugten Kennzahlen in dem "Hauptprogramm". Die Aufteilung in einzelne Funktionen wäre auch gegangen, doch falls gewünscht kann ich sie mir doch auch aus dem erzeugten Datensatz holen ?! Kennzahlen dict() ist eine Relikt aus der Listenzeit :-).

gruß frank

Verfasst: Donnerstag 27. September 2007, 09:01
von poker
Kommentare benutzt man eigentlich um Komplizierte stellen im Code zu dokumentieren. Doc-strings nutzt man um Funktionen/klassen zu dokumentieren.


Da wäre es z.B. unpassend Kommentare zu nutzen. Die Beschreibung der Klasse und Funktion packt man besser in doc-strings. So kann man z.B. per `help()` sich in idle oder im script die Beschreibungen ausgeben lassen. Auch Dokumentationswerkzeuge können anhand der doc-strings eine automatische API-Dokumentation generieren.

Code: Alles auswählen

class Spam(object):
    # Diese Klasse stellt eine Dose Spam bereit.
    # ...
    def __init__(self):
        # Beschreibung...
        pass
In diesem Beispiel ist es z.B. unpassend an solchen stellen doc-strings zu verwenden, da kein Mehrwert dadurch ensteht. Sol heißen: `help()` und Dokumentationswerkzeuge können an solchen stellen nichts raus ziehen. Auch wird intern von Python für jeden doc-string speicher angelegt und stellt somit an stellen wo es unnötig ist, eine unnötigen Speicherverbrauch dar (Wenn auch gering).

Code: Alles auswählen

class Spam(object):
    ...
    def open(self):
        """
        Beschreibung der Methode.
        """
        ....
        """Hier passiert was ganz kompliziertes und erfordert einen 
            kurzen aber verständlichen Kommentar."""
Besser:

Code: Alles auswählen

class Spam(object):
    """Diese Klasse stellt eine Dose Spam bereit."""
    def __init__(self):
        """Beschreibung..."""
        pass
    def open(self):
        """
        Beschreibung der Methode.
        """
        ....
        # Hier passiert was ganz kompliziertes und erfordert einen 
        # kurzen aber verständlichen Kommentar.
mfg

Verfasst: Samstag 29. September 2007, 19:08
von kaytec
Danke poker !

Habe Deine Hilfestellung noch nicht berücksichtigt - wollte die Oberfläche fertig machen.

Hier ist das Programm:
http://ubuntuusers.de/paste/15475/

gruß frank