2016-05-26 9 views
-3

まだPythonの継承を理解していない、私は感じる...ヒントのおかげで!Pythonクラスのメソッドを継承していますか?

スーパークラスのクラスメソッドを実行するサブクラスのインスタンスが必要です。試しましたこの:

class SuperClass() 
    @classmethod 
    def aClassMethod(cls) 
    pass 

class SubClass(SuperClass) 
    def aMethod(self) 
    self.__class__.aClassMethod() 

instance = SubClass() 
instance.aMethod() 

しかし、Pythonは「サブクラスが」属性「aClassMethod」を持っていないことを私に伝えます。はい、確かに分かりますが、スーパークラスのクラスメソッドをサブクラスインスタンスにアクセスできるようにするにはどうすればよいですか?

+4

は私たちに実際に実行され、実際に実行すると、問題を示すコードを表示します。このコードはコンパイルされず、構文エラーを修正すると、[記述した問題は表示されません](http://ideone.com/y6VWoE)。 – user2357112

+4

プログラムを再入力しないでください。あなたの質問にあなたの正確なコードをコピーして貼り付けてください。サンプルプログラムの作成の詳細については、[mcve]を参照してください。 –

+1

それは私のために働く。 – Daniel

答えて

1

どのようにして、スーパークラスのクラスメソッドをサブクラスインスタンスにアクセスできるようにすることができますか?

あなたは特別なことをする必要はありません。スーパークラスのメソッド(クラスメソッドを含む)はすべてサブクラスで使用できます。

は、あなたのプログラムのバージョンを考えてみましょう:あなたが見ることができるように、それはスーパークラスとサブクラスの両方の定期的な方法であるかのように

class SuperClass(): 
    @classmethod 
    def aClassMethod(cls): 
    print (cls.__name__) 

class SubClass(SuperClass): 
    def aMethod(self): 
    # Just call the super class's class method as if it were 
    # in your subclass: 
    self.aClassMethod() 


SubClass().aMethod() 
SubClass().aClassMethod() 
SubClass.aClassMethod() 

SuperClass().aClassMethod() 
SuperClass.aClassMethod() 

、クラスメソッドを呼び出し可能です。さらに、クラス名自体を使用して呼び出し可能であり、インスタンスは必要ありません。

結果:

SubClass 
SubClass 
SubClass 
SuperClass 
SuperClass 
+0

しかし、 'aClassMethod'はクラスメソッドなので、' self .__ class __。aClassMethod'も動作します。 – Daniel

+0

真実だが醜い。 –