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?
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
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)
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