2016-11-02 19 views
-1

コードを呼び出す:まあ、私はこれらの4つのクラスを持っている継承を使用し、他のクラスに

class aa: 
    def getDis(): 
     return 0 

class bb(aa): 
    def getDis(): 
     return 10 

class cc(aa): 
    def getDis(): 
     return 15 

class d: 
    def __init__(self,cust): 
     self.cust = cust 
     self.memberLevel = aa() 

    def cgl(self,amt): 
     if amt ==1: 
      self.memberLevel = bb() 
     elif amt ==2: 
      self.memberLevel = cc() 
     else: 
      self.memberLevel = aa() 

を。私がしようとしているのは、私の上位3つのクラスには私が継承しているということです。私のクラスでは、金額が1 0 2であればそれぞれのメソッドを呼び出そうとしています。代わりに、それは私に、この出力を与えている:

d1 = d('one') 
d1.cgl(1) 
print(d1.memberLevel) 

出力:

<__main__.bb object at 0x036D7BF0> 

を、どのように私は技術をオーバーライド使用できることが求め助けます。

+1

代わりに何を期待していましたか?ここで継承はどのように関連していますか? – jonrsharpe

+0

意図どおりにすべてが機能しているようですか?あなたが 'print(d1.memberLevel)'から期待していた出力は、実際には何も呼び出されていないので、 'cgl'のインスタンスを作成しているのですか? – UnholySheep

+0

トップクラスのクラスで継承しています。メソッドオーバーライド。あなたが私のクラスで見れば、私はクラスのメソッドがそれぞれ1または2であればそれを呼び出しています。クラスbbの関数から答えを得る必要があります。 – Kam

答えて

2

は、あなたがコンソール出力を見るために望んでいたようです:10

d1.memberLevelは、コンソール出力を示し(値10を返していない値10、およびない機能)BBクラス自体であるため<__main__.bb object at 0x036D7BF0>。これはオブジェクトを直接入力するときの正しい動作です。

おそらく、コンソールのコードの最後の行は言う必要があります:

print(d1.memberLevel.getDis()) 

別のオプションは、「D」クラス内の値を割り当てるには、次のようになります。

self.memberLevel = bb().getDis() 

とメンバーメソッドが必要です「自己"例:

def getDis(self): 
    return 10 
+0

getDisはクラスdのメソッドではありません。代わりに、クラスaa、bb、ccのオーバーライドメソッドです。正しい結果でそれぞれのクラスメソッドを呼び出す必要があります。 – Kam

+0

@Kam yesですが、 'memberLevel' *は' aa'またはその子孫のインスタンスです。 – jonrsharpe

+0

memberLevelはクラスdのインスタンス属性です。私はaa()でそれを初期化しました。 – Kam

関連する問題