2016-04-10 9 views
1

2つのクラスを継承して1つのクラスのインスタンスを別のクラスのinitメソッドに渡すのはどういう違いがありますか?以下のようにクラスを継承してクラスインスタンスを別のクラスに渡す間のPython差分

、 方法1:

class ht(object): 

    def __init__(self): 
     pass 

    def ch(self): 
     self.filename="hellgmhjkl" 


class tt(): 
    def __init__(self,ob1,ob3): 
     self.ob1=ob1 
     self.ob3=ob3 
     self.b=5 

    def display(self): 
     print(ob1.filename) 
     print(self.ob3.d) 

class kk(): 
    def __init__(self): 
     self.c=3 

    def hel(self): 
     self.d=self.c+5 


if __name__ == '__main__': 
    ob1=ht() 
    ob1.ch() 
    ob3=kk() 
    ob3.hel() 
    ob2=tt(ob1,ob3) 
    ob2.display() 

方法2:

class ht(object): 

    def __init__(self): 
     pass 

    def ch(self): 
     self.filename="hellgmhjkl" 


class tt(ht): 
    def __init__(self,ob1,ob3): 
     self.ob1=ob1 
     self.ob3=ob3 
     self.b=5 

    def display(self): 
     print(ob1.filename) 
     print(self.ob3.d) 

class kk(): 
    def __init__(self): 
     self.c=3 

    def hel(self): 
     self.d=self.c+5 


if __name__ == '__main__': 
    ob1=ht() 
    ob1.ch() 
    ob3=kk() 
    ob3.hel() 
    ob2=tt(ob1,ob3) 
    ob2.display() 

方法1と2の間のdiffは何ですか? 私はいくつかのクラスを持っています:config.py、log.py、analyse.py、HTTPrequest.py、request.py、attack.py

上記のクラスはすべて、config.pyとlogのクラス変数の値が必要です.py。 また、analyse.pyにはrequest.pyとHTTPRequestの値が必要です.pyとattack.yにはrequest.pyの値が必要です。

誰でも複数の、または複数レベルまたはusecompositionのように継承する方法を教えてくれますか?

答えて

0

既存のオブジェクトの動作を変更する場合は、クラスを継承します。継承として、親オブジェクトの既存のプロパティ、メソッド、およびビヘイビアをすべて提供します。独自のカスタマイズをコードするだけです。あなたの新しいオブジェクトは、親オブジェクトの派生物です。

クラスを渡すことは、そのクラスのオブジェクトをのように使用することを意味し、おそらくそれの新しいインスタンスをインスタンス化します。

クラスは、カスタムオブジェクト(またはタイプ)を作成するためのファクトリにすぎないことに注意してください。

あなただけの特定のファイルからの値が必要な場合は、単にそれらをインポートします。その作業が、方法

from request import a, b, c 
from HTTPRequest import one, two, three 
+0

私はそのメソッドがインポートプロセス自体の間に起動する前に自動的に実行されますクラス定義を含むファイルをインポートします。実行せずにクラスとメソッドを含むファイルをインポートする方法。 __name __ == "__ main__":クラス名を継承してメインメソッド – user3264821

+0

_をクラスに継承できないため、クラスを囲むことはできません。 "クラス定義でファイルをインポートすると、そのメソッドはインポートプロセス中に自動的に呼び出されます。実行しないでクラスとメソッドを含むファイルをインポートする "_ - ファイル全体が評価されるのは、' foo = MyClass() 'のような文がクラスをインスタンス化する場合のみです。それ以外の場合、コードは評価されますが、必要になるまで実行されません。 –

+0

スクリーンショットで上記の私の答えを見て、コードがインポート中に2回実行されている – user3264821

0

は二回、必ず実行されます。

init.py 

init.py

HTTPreq.py 

httpreq.py

anal.py 

anal.py

tree_structure 

tree

関連する問題