web-dev-qa-db-fra.com

Python 2.6: Classe dans une classe?

Salut tout le monde, mon problème est que je suis en train d'essayer de comprendre comment obtenir une classe à l'intérieur d'une autre classe.

Ce que je fais, c’est que j’ai un cours pour un avion avec toutes ses statistiques sur sa vitesse de vol, sa distance, sa consommation de carburant, etc. Ensuite, j'ai une classe de vol qui contient tous les détails du vol: distance, lieu et heure de départ, lieu et heure de fin, durée, etc.

Mais j'ai réalisé que chaque avion effectuait plusieurs vols, alors pourquoi ne pas mettre toutes les données de vol dans la classe des avions? Bien que comment puis-je mettre une classe dans une autre classe afin que je puisse appeler quelque chose comme ça:

Player1.Airplane5.Flight6.duration = 5 hours

Je l'ai un peu fait avec la classe airplane, mais lorsque je vais sauvegarder les informations (en répertoriant tout dans un document texte), tout ce que cela me donne est l'emplacement Hex des données et non les chaînes réelles.

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

Y at-il un moyen de mettre une classe dans une classe? ou devrais-je créer une classe Super Player qui gère toutes les informations pour lesquelles je utilise d'autres classes?

27
Pilot824

Je pense que vous confondez les objets et les classes. Une classe dans une classe ressemble à ceci:

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

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

Mais cela ne me semble pas être ce que vous voulez. Peut-être êtes-vous après une simple hiérarchie de confinement:

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

Ensuite, vous pouvez construire et utiliser les objets ainsi:

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
63
Marcelo Cantos

On dirait que vous parlez de agrégation . Chaque instance de votre classe player peut contenir zéro ou plusieurs instances de Airplane, qui, à leur tour, peuvent contenir zéro ou plusieurs instances de Flight. Vous pouvez implémenter cela en Python en utilisant le type intégré list pour vous enregistrer en nommant des variables avec des nombres. 

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 __== '__main__':
    player = Player()
    player.add_planes()
    player.airplanes[0].add_flight(5)
28
Johnsyweb
class Second:
    def __init__(self,data):
        self.data = data

class First:
    def SecondClass(self,data):
        return Second(data)

FirstClass = First()
SecondClass = FirstClass.SecondClass('now you see me')
print SecondClass.data
0
Jimmy Vos