[python-users] Vererbung und Subtyping

do_not_reply_to_this_address at t-online.de do_not_reply_to_this_address at t-online.de
Mi Apr 29 16:36:39 CEST 2009


Hallo zusammen,
Ich versuche gerade die kleinen aber feinen Unterschiede zwischen 
Vererbung und Subtyping zu verstehen. Dazu habe ich versucht ein Python 
Beispiel zu bauen was Vererbung ohne Subtyping demonstrieren soll. Nur 
weiss ich nicht ob es das wirklich tut und ob die Begriffe wirklich 
richtig verstanden habe. Hier das Beispiel:


class cat:
    def meow(self):
        print "meow!"
       
class dog:
    def bark(self):
        print "wow!"
       
class catdog(cat,dog):
    pass
    
catdog1=catdog()
print isinstance(catdog1,dog)
catdog1.bark()

snoopy=dog()

catdog2=cat()
catdog2.bark=snoopy.bark
print isinstance(catdog2,dog)
catdog2.bark()


Ausgabe:

1 True
2 wow!
3 False
4 wow!

Jetzt habe ich also einen Implementierungsanteil von snoopy an catdog2 
vererbt. Oder von mir aus von Klasse dog an catdog2 vererbt. (wow! in 
der vierten Zeile). Jedoch ist catdog2 keine Instanz eines Subtyps von 
dog (False in der dritten Zeile). Allerding ist catdog1 eines Instanz 
eins eines Subtyps von dog (True in der ersten Zeile), daher ist der 
Implementierungsanteil automatisch vererbt (wow! in der zweiten Zeile).
Die Interfaces in Java bilden jetzt ein Beispiel dafür das ich eine 
Subtypen bilde aber keine Implentierung aus dem SuperTypen in den 
SubTypen übernehme, also nicht erbe.

Gruß Dirk





Mehr Informationen über die Mailingliste python-users