Anfängerfrage zur Vererbung

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
ravenheart
User
Beiträge: 70
Registriert: Mittwoch 10. November 2010, 18:41

Code: Alles auswählen

class A:
    def __enter(self):
        print("base in")
    def __exit(self):
        print("base out")
    def foo(self):
        self.__enter()
        print "foo"
        self.__exit()

class B(A):
     def __enter(self):
         print "derived in"
     def __exit(self):
         print "derived out"
Wie bringe ich eine Instanz von B dazu , die Funktion foo von ihrer superklasse zu übernehmen, allerdings die eigene enter und exit aufzurufen?

Code: Alles auswählen

b = B()
b.foo()

->
base in
foo
base out
EDIT:
ich weiß, dass das so wie es hier steht nicht viel mit Vererbung an sich zu tun hat.
Das ist nur etwas das ich inmitten echter OO gerne erreichen würde.

Nur bevor die ersten wieder schreien, dass das ganze nicht mit Vererbung zu tun hätte.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Indem du keine doppelten Unterstriche benutzt, welche genau für das von dir bemängelte Verhalten gedacht sind.
Das Leben ist wie ein Tennisball.
ntrunk
User
Beiträge: 83
Registriert: Sonntag 7. September 2008, 23:09
Wohnort: Buchen (Odenwald)

Hi,
ravenheart hat geschrieben: Wie bringe ich eine Instanz von B dazu , die Funktion foo von ihrer superklasse zu übernehmen, allerdings die eigene enter und exit aufzurufen?
Indem du auf die beiden führenden Unterstriche verzichtest oder mindestens 2 Unterstriche dranhängst. Näheres in der Doku unter dem Stichwort "Private name mangling".

Gruß
Norbert
ravenheart
User
Beiträge: 70
Registriert: Mittwoch 10. November 2010, 18:41

AUA


verdammt, ich möchte eigentlich nur, dass der Nutzer diese Methoden nicht sieht, da sie für den internen Gebrauch geschrieben sind.

und __xxx__ wollte ich nicht nutzen, da enter und exit in der magic_member form hier nicht angebracht sind.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Für "private" Attribute ist ein führender Unterstrich gedacht, du solltest dich daher umgewöhnen ;-)

Sebastian
Das Leben ist wie ein Tennisball.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

ravenheart hat geschrieben:verdammt, ich möchte eigentlich nur, dass der Nutzer diese Methoden nicht sieht, da sie für den internen Gebrauch geschrieben sind.
Das ist Sache der Dokumentation. Daneben gibt es die Konvention _einen_ Unterstrich zu nutzen (siehe PEP 8).
ravenheart hat geschrieben:und __xxx__ wollte ich nicht nutzen, da enter und exit in der magic_member form hier nicht angebracht sind.
Ja, davon sollte man absehen, wenn man nicht explizit das "magische" Verhalten will.
Antworten