2017-08-25 6 views
0

私は最初の言語としてJAVAを使ってOOPの原則を学んだ後、Pythonに移動しました。 。親クラスの子クラスのプロパティにアクセスすることをお勧めします

しかし、本当にお勧めですか?

以下は、親クラスの子クラスのプロパティにアクセスできないため、Javaでエラーが発生します。

class parent(object): 
    def print_x(self): 
     print self.x 


class child(parent): 
    x = 10 

child().print_x() 

PEP8は、この場合にも警告できます:

未解決の属性参照 'X' クラスの '親'

コードトラバーサルとデバッグが私に少し問題となります個人的な意見。

+5

にされるであろう。 PythonはJavaよりもはるかに動的であり、コンパイル時にこれをチェックしません。 Javaと同じ理由で、まだ悪いコードです。 – deceze

答えて

3

おそらく、これは依存性注入がより適切な場所(構成対継承)です。最高に疑問のある「子供たち」に至る「親」。

はどのようにの線に沿ってより多くの何かについて:

class Container(object): 
    def __init__(self, child_instance): 
     self.child = child_instance 

    def print_x(self): 
     print self.child.x 

class Child(object): 
    def __init__(self, x): 
     self.x = x 

child = Child(10) 
parent = Container(child) 
parent.print_x() 

継承の代わりに、組成物には多くの利点が、このように、多くのケースではありますが、私は強くあなたがそれらを研究お勧めします。

+1

あなたは 'print self.child.x'を正しく意味していましたか? –

+0

@GaurangShah絶対、thx! – smassey

1

あなたは* * * *はい、これは問題がある、エラーを生成するた、 `独自にparent`をインスタンス化することができますので、きれいな方法が

class Parent(object): 

    @property 
    def x(self): 
     raise NotImplementedError 

    def print_x(self): 
     print self.x 


class Child(Parent): 
    x = 10 
関連する問題