2010-07-11 42 views
22

Hola a todos, mi problema es que estoy tratando de averiguar cómo obtener una clase DENTRO de otra clase.Python 2.6: ¿clase dentro de una clase?

Lo que estoy haciendo es que tengo una clase para un avión con todas sus estadísticas en cuanto a la rapidez con que puede volar, lo lejos que puede ir, el consumo de combustible, y así sucesivamente. Luego tengo una clase de vuelo que contiene todos los detalles sobre el vuelo: distancia, ubicación y hora de inicio, ubicación y hora de finalización, duración, etc.

Pero me di cuenta de que cada avión tiene múltiples vuelos, ¿por qué no poner todos los datos de vuelo en la clase de avión? Aunque ¿Cómo puedo poner una clase a otra clase para que pueda llamar a algo como esto:

Player1.Airplane5.Flight6.duration = 5 hours 

Ive algo hecho con la clase del avión, pero cuando voy a guardar la información (lista de todo lo que fuera en un documento de texto), todo lo que me da es la ubicación Hex de los datos y no las cadenas reales.

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 

¿Hay alguna manera de poner una clase dentro de una clase? ¿o tendré que hacer una clase súper jugador que maneje toda la información que estoy utilizando otras clases?

Respuesta

55

Creo que está confundiendo objetos y clases. Una clase dentro de una clase se ve así:

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

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

Pero no me parece que eso es lo que quieres. Tal vez usted es después de un árbol de contenidos simple:

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 
     ... 

entonces usted puede construir y utilizar los objetos de este modo:

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

Suena como que está hablando agregación. Cada instancia de la clase player puede contener cero o más instancias de Airplane, que, a su vez, puede contener cero o más instancias de Flight. Puede implementar esto en Python usando el tipo incorporado list para guardar las variables de nomenclatura con números.

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

necesitan alguna descripción funcionalidad. –

Cuestiones relacionadas