ich habe mich neu in die objektorientierte Programmierung eingearbeitet.
Nun komme ich aber an das erste Problem.
Ich habe eine Klasse (Artikel) und möchte über alle Variablen die in __init__ vergeben wurden mit Hilfe einer for - Schleife durchlaufen.
Mein Gedanke dahingehend wäre gewesen, sollten neue Eigenschaften eines Artikels hinzukommen, müsste ich nicht __repr__ abändern.
Leider erhalte ich immer die Fehlermeldung "TypeError: 'function' object is not iterable".
Auch nach vermehrter suche im Forum und in der Suchmaschine habe ich leider keine Lösung für mein Problem finden können.
Ich würde mich daher sehr um Hilfe freuen.
Code: Alles auswählen
#!usr/bin/python3
import csv
import re
import shutil
class Lager:
def __init__(self):
self.Lager = []
self.Feldnamen = []
def artikel_hinzufuegen(self, Artikel):
self.Lager.append(Artikel)
def artikel_anzeigen(self):
for a in self.Feldnamen:
if a != "St. 7%" and a != "St. 19%"and a != "Lieferant" and a != "Lieferantenartikelnr.":
print(a + " | ", end="")
print(end="\n")
konsolen_breite_fuellen("-")
for Artikel in self.Lager:
print(Artikel)
konsolen_breite_fuellen("-")
def artikel_einlesen(self, Datei, Ziel):
with open(Datei, "r") as CSVdatei:
reader = csv.reader(CSVdatei, delimiter=";")
data = list(reader)
for Feldname in data[0]:
self.Feldnamen.append(Feldname)
for Einzelliste in data[1:]:
Ziel.artikel_hinzufuegen(Artikel(Einzelliste[0], Einzelliste[1], Einzelliste[2], \
Einzelliste[3], Einzelliste[4], Einzelliste[5], \
Einzelliste[6], Einzelliste[7], Einzelliste[8], \
Einzelliste[9], Einzelliste[10], Einzelliste[11], \
Einzelliste[12]))
class Artikel():
def __init__(self, nr, bez, menge, einh, vpe, e_pr_ne, st_7, st_19, e_pr_br, geb_pr_ne, geb_pr_br, lief, liefartnr):
self.Artikelnummer = int(nr)
self.Bezeichnung = bez
self.Menge = float(menge.replace(",", "."))
self.Einheit = einh
self.VPE = vpe#int(vpe)
self.E_Pr_Ne = e_pr_ne#float(e_pr_ne.replace(",", "."))
self.Steuer7 = bool(st_7)
self.Steuer19 = bool(st_19)
self.E_Pr_Br = e_pr_br#float(e_pr_br.replace(",", "."))
self.Geb_Pr_Ne = geb_pr_ne#float(geb_pr_ne.replace(",", "."))
self.Geb_Pr_Br = geb_pr_br#float(geb_pr_br.replace(",", "."))
self.Lieferant = lief
self.Lieferantenartikelnummmer = int(liefartnr)
def __repr__(self):
for a in Artikel.__init__:
return(a)
#return(str(self.Artikelnummer) + " | " + self.Bezeichnung)
def konsolen_breite_fuellen(Trennzeichen):
breite = shutil.get_terminal_size()
zeilen_breite = breite.columns
print(zeilen_breite * Trennzeichen, end="")
LA = Lager()
LA.artikel_einlesen("Artikelliste.csv", LA)
LA.artikel_anzeigen()
