Vererbung - Eigenschaften der __init__ Methode
Verfasst: Dienstag 31. Juli 2018, 22:45
Hallo zusammen,
ich habe eine Frage zur Funktionsweise der Vererbung. Insbesondere geht es um die in der Elternklasse deklarierten Eigenschaften und Methoden, die ich am nachfolgenden Beispiel gerne verstehen würde:
Mein Verständnis nach einem Tutorial war, dass ich in der Kindklasse (im Beispiel CsvReader) nicht erneut die __init__ Methode definieren muss, da diese identisch ist zu der Elternklasse (FileReader). Nun funktioniert die Kindklasse nicht wie erwartet. Ohne die __init__ Methode dort explizit zu definieren, kommt immer die Fehlermeldung: "AttributeError: 'CsvReader' object has no attribute '_CsvReader__file_as_list'". Auch wenn ich __init__in der Kindklasse definiere und mit super() versuche die Eigenschaften der Elternklasse zu übernehmen, bekomme ich die gleiche Fehlermeldung. Nur wenn ich den Inhalt komplett erneut definiere, läuft die Kindklasse.
Kann mir hier jemand auf die Sprünge helfen? Warum muss ich die __init__ Methode erneut in der Kindklasse erstellen. Sollte die Vererbungnicht gerade diese Redundanten Codestücke vermeiden?
ich habe eine Frage zur Funktionsweise der Vererbung. Insbesondere geht es um die in der Elternklasse deklarierten Eigenschaften und Methoden, die ich am nachfolgenden Beispiel gerne verstehen würde:
Code: Alles auswählen
class FileReader():
def __init__(self, path):
self.path = path
self.__file_as_list = []
self.line = None
def lines(self):
self.__file_as_list.clear()
with open(self.path, "r") as file:
for i in file:
self.line = i.strip()
self.__file_as_list.append(self.line)
return self.__file_as_list
class CsvReader(FileReader):
def __init__(self, path):
self.path = path
self.__file_as_list = []
self.line = None
# super().__init__(path)
def lines(self):
self.__file_as_list.clear()
with open(self.path, "r") as file:
for i in file:
self.line = i.strip().split(",")
self.__file_as_list.append(self.line)
return self.__file_as_list
Kann mir hier jemand auf die Sprünge helfen? Warum muss ich die __init__ Methode erneut in der Kindklasse erstellen. Sollte die Vererbungnicht gerade diese Redundanten Codestücke vermeiden?