2016-08-25 5 views
-1

Ich überschreibe eine Funktion, möchte aber die Funktion des übergeordneten Elements innerhalb des übergeordneten Elements abrufen.Abrufen der Funktion des übergeordneten Elements vom übergeordneten Element

>>> class a: 
...  def __init__(self): 
...    print(self.f) 
...  def f(self): 
...    pass 
... 
>>> class b(a): 
...  def __init__(self): 
...    super(b, self).__init__() 
...  def f(self): 
...    pass 
... 
>>> b() 
<bound method b.f of <__main__.b object at 0x000002E297A96160>> 

Ich möchte den Ausdruck sagen a.f.

+2

So können wir ein [XY Problem] (http vermeiden: // meta.stackexchange.com/questions/66377/what-is-the-xy-problem), was ist das * eigentliche * Problem, das du lösen willst? Eine Instanz von "b" sollte zuerst ihre eigene Implementierung von "f" sehen. – jonrsharpe

+0

Ich arbeite an etwas optimierendem Code. Das ist das * tatsächliche * Problem. –

+1

Das ist wirklich keine weiteren Informationen hinzugefügt. Wenn Sie nicht explizit sein wollen ('print (a.f)'), können Sie nicht. – jonrsharpe

Antwort

1

könnten Sie name mangling verwenden, um self.__f-A.__f aus A ‚s Klassendefinition beziehen zu machen.

Namen Mangeln ist hilfreich für die Vermietung Subklassen Methoden außer Kraft setzen, ohne Intra Methode zu brechen ruft

class A: 

    def __init__(self): 
     self.__f() 

    def f(self): 
     print('A.f') 

    __f = f # Private copy of A's `f` method 

class B(A): 

    def __init__(self): 
     super(B, self).__init__() 

    def f(self): 
     print('B.f') 

b = B() 
b.f() 

druckt

A.f 
B.f 
-1
class a(object): 
    def __init__(self): 
     pass 

    def f(self): 
     print 'Parent Method...' 

class b(a): 
    def __init__(self): 
     super(b, self).__init__() 
     a.f(self) #referance the parent class rather than the child class, because the child overrides the parent method. 
     self.f() 

    def f(self): 
     print "Childs Method..." 


b() 
+0

Wie die Fragen sagen, "von Eltern". Du nennst 'a.f' von der Kindklasse' b'. –

Verwandte Themen