2016-08-25 10 views
-1

私は関数をオーバーライドしますが、親の関数を親の中から保持したいと考えています。親から親の関数を取得する

>>> 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>> 

私はプリントアウトをa.fとしたいと思います。

+2

だから我々は、[XY問題](HTTPを回避することができます呼び出します// meta.stackexchange.com/questions/66377/what-is-the-xy-problem)、解決しようとしている*実際の問題は何ですか? 'b' *のインスタンスは' f'の独自の実装を最初に見るべきです。 – jonrsharpe

+0

私はいくつかの最適化コードに取り組んでいます。これは実際の問題です。 –

+1

これは本当に情報を追加していません。あなたが明示的にしたいのでない限り( 'print(a.f)')、あなたはできません。 – jonrsharpe

答えて

1

あなたはself.__fAのクラス定義内からA.__fを参照するためにname manglingを使用することができます。

名前マングリングは、サブクラスが内相方法を壊すことなくメソッドをオーバーライドさせるために有用である

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() 

プリントが

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

質問に「親から」と記載されています。子クラス 'b'から' a.f'を呼び出しています。 –

関連する問題