Python 2.6: класс внутри класса?
Привет всем, моя проблема в том, что я пытаюсь выяснить, как получить класс INSIDE другого класса.
То, что я делаю, у меня есть класс для самолета со всей его статистикой относительно того, как быстро он может летать, как далеко он может идти, расход топлива и т.д. Затем у меня есть класс полета, который содержит все сведения о полете: расстояние, начальное местоположение и время, конечное местоположение и время, продолжительность и т.д.
Но я понял, что у каждого самолета много полетов, так почему бы не поместить все данные полета в класс самолета? Хотя как я помещаю класс INTO в другой класс, поэтому могу называть что-то вроде этого:
Player1.Airplane5.Flight6.duration = 5 hours
Ive несколько сделал это с классом самолета, но когда я иду, чтобы сохранить информацию (перечисляя все в текстовый документ), все, что она дает мне, это местоположение Hex данных, а не фактические строки.
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
Есть ли способ разместить класс внутри класса? или мне нужно создать один класс Super Player, который обрабатывает всю информацию, которую им используют другие классы?
Ответы
Ответ 1
Я думаю, вы путаете объекты и классы. Класс внутри класса выглядит следующим образом:
class Foo(object):
class Bar(object):
pass
>>> foo = Foo()
>>> bar = Foo.Bar()
Но это не выглядит так, как вы хотите. Возможно, вы после простой иерархии сдерживания:
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
...
Затем вы можете создавать и использовать объекты таким образом:
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
Ответ 2
Похоже, вы говорите об агрегировании. Каждый экземпляр вашего класса player
может содержать ноль или более экземпляров Airplane
, который, в свою очередь, может содержать ноль или более экземпляров Flight
. Вы можете реализовать это в Python, используя встроенный тип list
, чтобы сохранить имена именования переменных с числами.
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)
Ответ 3
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