Seite 1 von 1

Anfängerfrage zur Vererbung

Verfasst: Montag 29. November 2010, 14:55
von ravenheart

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.

Re: Anfängerfrage zur Vererbung

Verfasst: Montag 29. November 2010, 15:23
von EyDu
Indem du keine doppelten Unterstriche benutzt, welche genau für das von dir bemängelte Verhalten gedacht sind.

Re: Anfängerfrage zur Vererbung

Verfasst: Montag 29. November 2010, 15:27
von ntrunk
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

Re: Anfängerfrage zur Vererbung

Verfasst: Montag 29. November 2010, 15:30
von ravenheart
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.

Re: Anfängerfrage zur Vererbung

Verfasst: Montag 29. November 2010, 15:33
von EyDu
Für "private" Attribute ist ein führender Unterstrich gedacht, du solltest dich daher umgewöhnen ;-)

Sebastian

Re: Anfängerfrage zur Vererbung

Verfasst: Montag 29. November 2010, 15:42
von cofi
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.