2016-04-10 5 views
1

Was ist der Unterschied zwischen dem Erstellen von zwei Klassen, die andere vererben, und dem Übergeben erster Klasseninstanzen an andere Klassen-Initmethoden?Python-Diff zwischen dem Vererben einer Klasse und dem Übergeben einer Klasseninstanz an eine andere Klasse

unter Wie, Methode 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() 

Methode 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() 

Was ist der Unterschied zwischen Methode 1 und 2? Meine Anforderung ist, ich habe mehrere Klassen: config.py, log.py, analyse.py, HTTPrequest.py, request.py, attack.py

Alle oben genannten Klassen benötigt die Klassenvariablen Werte aus config.py und log .py. Und analyse.py benötigt Werte von request.py und HTTPRequest, py und attack.y benötigt Werte von request.py.

Kann mir jemand helfen, wie multiple oder multilevel oder usecomposition zu vererben oder nur Klassenobjekte zu übergeben und wie?

Antwort

0

Sie erben von Klassen, wenn Sie das Verhalten eines vorhandenen Objekts ändern möchten. Als Vererbung erhalten Sie alle vorhandenen Eigenschaften, Methoden und Verhaltensweisen des übergeordneten Objekts. und alles, was Sie tun müssen, ist Ihre eigene Anpassung zu programmieren. Ihr neues Objekt ist eine Ableitung des übergeordneten Objekts.

Das Übergeben einer Klasse bedeutet, das Objekt dieser Klasse wie zu verwenden, möglicherweise eine neue Instanz davon instanziieren.

Denken Sie daran, dass Klassen nur Fabriken zum Erstellen von benutzerdefinierten Objekten (oder Typen) sind.

Wenn Sie nur Werte aus einer bestimmten Datei benötigen, einfach importieren:

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

wenn ich eine Datei mit einer Klassendefinition importieren Methodisch automatisch ausgeführt wird, bevor sich während des Importvorgangs aufgerufen wird. wie man eine Datei mit Klasse und Methoden importiert, ohne ausgeführt zu werden. Ich kann meine Klasse nicht einschließen wenn __name __ == "__ main__": da ich meinen Klassennamen nicht mit der eingeschlossenen Hauptmethode erben kann – user3264821

+0

_ "Wenn ich eine Datei mit einer Klassendefinition importiere, wird ihre Methode automatisch ausgeführt, bevor sie während des Importprozesses aufgerufen wird um eine Datei mit Klasse und Methoden zu importieren, ohne ausgeführt zu werden. "_ - Die gesamte Datei wird nur dann ausgewertet, wenn Sie eine Anweisung wie' foo = MyClass() 'haben, wird die Klasse instanziiert. Andernfalls wird der Code ausgewertet, aber nicht ausgeführt, bis er benötigt wird. –

+0

Schauen Sie sich meine obige Antwort mit Screenshots an, der Code wird während des Imports zweimal ausgeführt – user3264821

0

seine Arbeits aber Methoden werden immer zweimal ausgeführt:

init.py 

init.py

HTTPreq.py 

httpreq.py

anal.py 

anal.py

tree_structure 

tree