Seite 1 von 1

OOP in Python: Method Overriding und Overloading

Verfasst: Freitag 26. April 2013, 10:06
von krisjugisto
Hallo miteinander,

ich habe mich nach Jahren, in denen ich mich mit vergleichsweise plumpen Skriptsprachen über Wasser gehalten habe, beschlossen, voll auf Python zu setzen, um nun auch Programmieren systematisch zu lernen. Dabei ist Python für mich insofern als OOP-unterstützende Sprache Neuland. Ich habe mich weitgehend in die Theorie von OOP eingelesen, weiß also, mit der Notwendigkeit der Abstraktion, Vererbung und Polymorphie etwas anzufangen. Nun bin ich aber auf der Suche nach Tutorials oder Beispielprojekten, anhand derer ich 'method overriding' oder 'method overloading' besser und vor allem an praktischen Anwendungsfällen studieren kann.

Könnt ihr mich eventuell in die richtige Richtung schubsen. Danke!

Grüße

kris

Re: OOP in Python: Method Overriding und Overloading

Verfasst: Freitag 26. April 2013, 10:17
von BlackJack
@krisjugisto: Overloading gibt es in Python nicht. Es gibt ja keine Typsignaturen bei Funktionen/Methoden bei dynamisch typisierten Sprachen, also auch keine Möglichkeit anhand der Typsignatur die richtige Funktion/Methode heraus zu suchen. Und Namen müssen innerhalb eines Namensraums in Python eindeutig sein. Oder anders ausgedrückt, man kann zu einem gegebenen Zeitpunkt an *einen* Namen nur *ein* Objekt binden.

Overriding kommt in Python auch gar nicht so häufig vor, weil durch das „duck typing” nicht so oft Klassenhierarchien entstehen müssen wie in statisch typisierten Programmiersprachen.

Re: OOP in Python: Method Overriding und Overloading

Verfasst: Freitag 26. April 2013, 10:32
von krisjugisto
@BlackJack: Danke für die Hinweise. Das erklärt einiges, mein Lehrbuch zu OOP springt an den Stellen zu Overloading und Overriding immer auf Java oder andere statisch-typisierte Sprachen um. :wink:

@all: In dem Fall ändere ich meine Frage etwas um, dass ich aber gerne noch Hinweise zu gut strukturierten Beispielen für sauber umgesetztes OOP in Real-Life-Projekten annehme. Einfach damit ich ein Gefühl dafür kriege. Danke.

Re: OOP in Python: Method Overriding und Overloading

Verfasst: Freitag 26. April 2013, 12:14
von xeike
Mir haben beim Üben mit diesen Sachen durchaus an den Haaren herbeigezogene Übungen sehr geholfen. Tatsächlich gebraucht habe ich nur wenig davon.

Hier mal etwas, was ich geschrieben habe, um ein paar Sachen (Implementation, Ausnahmen) gekürzt:

Code: Alles auswählen

class Vektor:
    def __init__(self, x, y, z):
        pass

      def __mul__(self, arg):
          if isinstance(arg, (int)):
              print( "multipliziere int" )
          elif isinstance(arg, (Vektor)):
              print("multipliziere Vektor")
          else:
             print("mache nix")
Die Typensignatur habe ich mir über isinstance() "geholt", also eher konkret verglichen.

Um einfach mal ein Gefühl dafür zu bekommen, könntest du eine Klasse Matrix implementieren und den Gauß'schen Algorithmus, wobei du dabei ja Vielfache von Zeilenvektoren zu anderen Zeilenvektoren addieren musst. All das gibt es natürlich auch schon, aber als Übung ist das nicht zu verachten, finde ich.

Dann natürlich auch noch Übungen mit vorhandenen Klassen, hier bietet sich PyQt an. Das ist ein recht großes System von ineinander verzahnten Klassen. Kapselung und Vererbung braucht man dort wirklich, das Überschreiben von Methoden seltener, aber auch.

Xe

Re: OOP in Python: Method Overriding und Overloading

Verfasst: Freitag 26. April 2013, 13:36
von krisjugisto
@xeike: Danke für Tipps.

Re: OOP in Python: Method Overriding und Overloading

Verfasst: Donnerstag 2. Mai 2013, 10:07
von Leonidas
@xeike: Deine Tupel die du da bei ``isinstance`` hast sind gar keine Tupel. Da würde ich dann entweder echte Tupel draus machen oder die Klammern weglassen.