2010-07-11 12 views
22

Hey everyone, mein Problem ist, dass im zu versuchen, herauszufinden, wie man eine Klasse in einer anderen Klasse zu erhalten.Python 2.6: Klasse in einer Klasse?

Was ich tue, ist, ich habe eine Klasse für ein Flugzeug mit allen seinen Statistiken darüber, wie schnell kann es fliegen, wie weit es gehen kann, den Kraftstoffverbrauch, und so weiter. Dann habe ich eine Flugklasse, die alle Details über den Flug enthält: Entfernung, Startort und -zeit, Endort und -zeit, Dauer und so weiter.

Aber ich erkennen, dass jedes Flugzeug mehrere Flüge hat, also warum nicht alle die Flugdaten in das Flugzeug Klasse setzen? Obwohl, wie so lese ich eine Klasse in eine andere Klasse versetzen kann ich so etwas wie dies nennen:

Player1.Airplane5.Flight6.duration = 5 hours 

Ive etwas mit dem Flugzeug Klasse gemacht, aber wenn ich die Informationen (die Auflistung alles heraus in ein Textdokument gehen zu speichern), alles, was es mir gibt, ist die Hex-Position der Daten und nicht die tatsächlichen Zeichenfolgen.

class Player (object):#Player Class to define variables 
    '''Player class to define variables''' 

    def __init__ (self, stock = 0, bank = 200000, fuel = 0, total_flights = 0, total_pax = 0): 
     self.stock = stock 
     self.bank = bank 
     self.fuel = fuel 
     self.total_flights = total_flights 
     self.total_pax = total_pax 
     self.Airplanes = Airplanes 
     self.flight_list = flight_list 

Gibt es eine Möglichkeit, eine Klasse in eine Klasse einzuordnen? Oder muss ich eine Super-Player-Klasse erstellen, die alle Informationen behandelt, die ich für andere Klassen verwende?

Antwort

55

Ich glaube, Sie verwirrend Objekte und Klassen sind. Eine Klasse innerhalb einer Klasse sieht so aus:

class Foo(object): 
    class Bar(object): 
     pass 

>>> foo = Foo() 
>>> bar = Foo.Bar() 

Aber es sieht nicht so aus, als ob das was du willst. Vielleicht sind Sie nach einer einfachen Container-Hierarchie:

class Player(object): 
    def __init__(self, ... airplanes ...) # airplanes is a list of Airplane objects 
     ... 
     self.airplanes = airplanes 
     ... 

class Airplane(object): 
    def __init__(self, ... flights ...) # flights is a list of Flight objects 
     ... 
     self.flights = flights 
     ... 

class Flight(object): 
    def __init__(self, ... duration ...) 
     ... 
     self.duration = duration 
     ... 

Dann können Sie bauen und die Objekte verwenden, also:

player = Player(...[ 
    Airplane(... [ 
     Flight(...duration=10...), 
     Flight(...duration=15...), 
     ] ...), 
    Airplane(...[ 
     Flight(...duration=20...), 
     Flight(...duration=11...), 
     Flight(...duration=25...), 
     ]...), 
    ]) 

player.airplanes[5].flights[6].duration = 5 
25

Es klingt wie Sie über Aggregation sprechen. Jede Instanz Ihrer player Klasse kann enthält keine oder mehr Instanzen von Airplane, die wiederum keine oder mehr Instanzen von Flight enthalten. Sie können dies in Python mit dem integrierten Typ list implementieren, um die Benennung von Variablen mit Zahlen zu speichern.

class Flight(object): 

    def __init__(self, duration): 
     self.duration = duration 


class Airplane(object): 

    def __init__(self): 
     self.flights = [] 

    def add_flight(self, duration): 
     self.flights.append(Flight(duration)) 


class Player(object): 

    def __init__ (self, stock = 0, bank = 200000, fuel = 0, total_pax = 0): 
     self.stock = stock 
     self.bank = bank 
     self.fuel = fuel 
     self.total_pax = total_pax 
     self.airplanes = [] 


    def add_planes(self): 
     self.airplanes.append(Airplane()) 



if __name__ == '__main__': 
    player = Player() 
    player.add_planes() 
    player.airplanes[0].add_flight(5) 
0
class Class2 : 
    def __init__(self,Data): 
     self.Data = Data 

class Class1 : 
    def Class2(self,Data): 
     return Class2(Data) 


Class1 = Class1() 
Class2 = Class1.Class2('now you see me') 
print Class2.Data 
+0

einige Funktionen Beschreibung benötigen. –

Verwandte Themen