OOP Struktur

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
gerald123
User
Beiträge: 36
Registriert: Donnerstag 10. September 2015, 12:10

Hey, ich versuche meine ersten Beispiel im Bereich OOP. Meine Frage: Ich möchte folgende Klassenstruktur implementieren:
Die "BaseClass" ist eine Subklasse der Klasse "Template". Weiters sollen 2 Subklassen (SubClass1, SubClass2)der Klasse "BaseClass" implementiert werden.
Die "BaseClass" enthält neben den Methoden der Klasse "Template" den Großteil aller benötigen Methoden. Die Subklassen "Sub1" und "Sub2" sollen neben den Methoden der "BaseClass" noch jeweils zusätzliche Methoden enthalten.

Bei der Erstellung eines Objektes soll ein Parameter übergeben werden, der die Art der Klasse (Sub1,Sub2) definiert.

Code: Alles auswählen

class BaseClass(Template): “inheritance der Klasse Template”
	def __init__(self, case):
		"if case = "SubClass1" --> ??
		 if case =="SubClass2" --> ??
	def Methode1(self):
	def Methode2(self):

class SubClass1(BaseClass):
	def Methode3(self):
class SubClass2(BaseClass):
	def Methode4(self):
	
test = BaseClass("SubClass2")	


Mir ist ebenfalls nicht klar, wie die methode: def __init__(self): der SubClass1 und SubClass2 definiert sein sollte (es soll __init__ der Klasse "Template" aufgerufen werden"). Meine Idee:

Code: Alles auswählen

 def __init__(self):
        super(Subclass1, self).__init__(case)
Meine Frage: Wie kann eine generelle Klassenstruktur für diese Fragestellung ausshauen?
Ich habe gelsen, dass "parent-classes" nichts von den "children" wissen sollen etc.

Vielen Dank für eure Hilfe!
BlackJack

@gerald123: Wie Du selber schon schreibst sollen Klassen nichts über ihne abgeleiteten Klassen wissen müssen. Das was Du in `BaseClass.__init__()` machen möchtest gehört dort also nicht hinein! Das kann man als Funktion schreiben und/oder über ein Wörterbuch lösen:

Code: Alles auswählen

NAME2CLASS = {
  'SubClass1': SubClass1,
  'SubClass2': SubClass2,
}

def create_instance(name):
    return NAME2CLASS[name]()


def main():
    test = create_instance('SubClass1')
Oder man lässt diesen Umweg über eine Zeichenkette weg und erstellt gleich das gewünschte Objekt.

Bei Deinem zweiten Quelltextschnippsel: Wo kommt denn da `case` her?
Antworten