2016-04-10 95 views
1

創建兩個類繼承其他類並將第一個類實例傳遞給另一個類init方法有什麼區別?python diff繼承一個類,只是將類實例傳遞給另一個類

像下面, 方法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之間的差異? 我的要求是我有幾個類: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

用屏幕截圖來看看我上面的答案,代碼在導入過程中執行了兩次 – user3264821

0

其工作,但方法總是執行兩次:

init.py 

init.py

HTTPreq.py 

httpreq.py

anal.py 

anal.py

tree_structure 

tree