2011-08-09 24 views
2

私は奇妙な質問があり、実際のコンテキストがかなり複雑であると見ると、私は簡単な例を作りました。私は2つのクラスを持っていますベース子供。それぞれは同じ名前のメソッドを共有しますになります。私が欲しいもの子供クラスは、メソッドを継承します。ベースです。私はは、私はそれはいくつかのことをやりたい上の子メソッドを行く呼び出すときしかし、それはベースから継承行くメソッドを呼び出して、(この場合、属性2によってを掛けます)。 35を印刷しを呼び出すこの例では同じ名前と継承を持つメソッド、Python

は私が子供は70

class Base : 
    def __init__ (self) : 
     self.A = 35 

    def go (self) : 
     print self.A 


class Child (Base) : 
    def __init__ (self) : 
     Base.__init__(self) 

    def go (self) : 
     self.A = self.A * 2 

     # Somehow call Base's **go** method, which would print 70. 

を印刷する間、私はそれが(見て一般的にこれを行うには良いアイデアではないことを理解し、ベースを行きます混乱する可能性があるので)、しかし、私がやっていることの文脈では意味があります。

答えて

6

これは絶対にすばらしいことです。あなたが探しているものはsuper()です。

Python 3では、正しいものを自動的に検出するため、引数なしで使用できます。

編集:super()は、とにかく使用する新しいスタイルのクラスです。ただ、objectから継承などの別から継承していない任意のクラス宣言:

class Base(object): 

また、これらすべての余分なスペースの前と括弧の後には考慮されていない良いのpythonのスタイルを、PEP8を参照してください。

+0

ええと、2.7ではこれはうまくいかないようです。エラーが出ます** TypeError:classobj **ではなくタイプでなければなりません。 – rectangletangle

+1

それは動作します。あなたは新しいスタイルのクラスを使う必要があります(彼らはもっと良いと思います)。 'class Base:'を 'class Base(object):'に変更するだけです。 – agf

+0

問題が修正されました。ありがとうございます! – rectangletangle

関連する問題