2012-03-14 15 views
-2

のでc.getは().....メソッドは、誰もがこれを説明することができますと呼ばれますどのクラスを取得する場合Pythonの多重継承プロパティ

class A: 
    def get(self): 
    print "In A get" 

class B: 
    def get(self): 
    print "In B get" 

class C(A,B): 
    def __init__(self): 
    print "In c init" 

c=C() 
c.get() 
+5

は、なぜあなたは、コードを実行し、表示されないのですか? – Marcin

+0

また、これはどのバージョンのpythonですか?それは重要です。 – Marcin

+0

多分これは役立ちます:http://stackoverflow.com/questions/3810410/python-multiple-inheritance-from-dame-method-name –

答えて

4

まあAとBから継承されますクラスAからのものでなければなりません。 検索は深さ優先、左から右のためです。

+0

理論的にはAメソッドを呼び出すべきですが、私が言及したエラーは何ですか? – Rajeev

+2

@Rajeev: 'self'パラメータを' get'メソッドに追加するのを忘れました。 –

+0

@Niklas B:ちょっと今働いていた...感謝...... – Rajeev

0

あなたが言ったエラーは明確です:あなたのメソッドはバインド先のオブジェクトへの参照を取り込むことを意図していますが、そうではありません。彼らは方法があるよう

def get(self): 

にそれらを変更し

1

まず、メソッド宣言内に自己変数を持たないため、このコードはinncorectです。正しいバージョンは次のとおりです。

class A: 
    def get(self): 
    print "In A get" 

class B: 
    def get(self): 
    print "In B get" 

class C(A,B): 
    def __init__(self): 
    print "In c init" 

c=C() 
c.get() 

第二に、これは印刷されます:

In c init 
In A get 

を順序がMethod Resolution Order (MRO)で定義されています。 BasicallクラスCはBのすべてのメソッド/属性を持ち、Aからのすべてのメード/属性によってオーバーライドされます。

0

emircと同様にA classメソッドになります。あなたがそのように、get定義にselfパラメータを追加する必要があるため

エラーが与えられます。

class A: 
def get(self): 
print "In A get" 

class B: 
def get(self): 
print "In B get" 

class C(A,B): 
def __init__(self): 
print "In c init" 

c=C() 
c.get()