2016-09-18 7 views
-1

私は基本クラスから継承された2つの子クラスを持っています。私は実際にいくつかの条件に応じて子クラスのオブジェクトの1つを返す異なるスクリプトに1つのメソッドを持っています、同じ方法を使用して別の子オブジェクトを返すPythonの正しい方法です。私は彼らのタイプが同じで、同じベースクラスから継承されているので、はいと思いますか?または、型キャストを行う必要がありますか?以下の例は、単純な言葉で質問を説明するためのものです。同じメソッドを使用して条件に応じて異なる子オブジェクトを返します

class A(): 

class B(A): 
    Different methods 

class C(A): 
    Different methods 

その他のスクリプト:

def test_func: 
    if <some-condition> 
     new_obj = B() 
    else 
     new_obj = C() 
    return new_obj 
+0

これは問題ありません。ファクトリデザインパターンの例です。 – Barmar

+1

Pythonはダック型言語であり、型キャストはありません。あなたが使用しているアプローチは正しいですが、それ以外のことはあまりありませんが、例のコードは構文的に正しいPythonではありません。 –

+0

[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のような匂いがします。あなたは正確に何をしようとしていますか? – ozgur

答えて

0

Pythonは動的型付け言語です。 1つは型を宣言しません。だから、その側から、引数を渡してあらゆる型の値を返すのはまったく問題ありません。

一方、オブジェクトを使用できるようにするには、インターフェイスを守らなければなりません。たとえば、開かれたファイルではなく、readreadlineのメソッドを渡すことができます。これは受け入れられるだけでなく、実際には他の言語に比べてPythonの強力な利点の1つです。

この質問では、このケースはPythonで通常行われているよりもはるかにクリーンです。このパターンは、例えば、はるかに厳しいC++(this question参照)。

TL; DR:

はい、それは結構です。 BCは、test_funcを使用するコードでも同様に見て、動作していれば(そしてquacked)、Aから継承しても問題ありません。

+0

@MartijnPieters私は訂正した。どうやら、私の用語は若干の刷新を必要としています。訂正してくれてありがとう。私は答えを更新しました。 – zvone

関連する問題