Python 2.6: Класс в Классе?

Эй все, моя проблема состоит в том, что я пытаюсь выяснить, как получить класс В другом классе.

То, что я делаю, у меня есть класс для Самолета со всей его статистикой относительно того, как быстро она может полететь, как далеко она может пойти, расход топлива, и так далее. Затем у меня есть Класс Полета, который является всеми подробностями о полете: Расстояние, стартовое местоположение и время, конечное местоположение и время, продолжительность, и так далее.

Но я понял, что каждый самолет имеет несколько полетов, итак, почему бы не поместить все полетные данные в класс самолета? Хотя, как, я поместил класс В другой класс, таким образом, я могу назвать что-то вроде этого:

Player1.Airplane5.Flight6.duration = 5 hours

Я несколько сделал это с классом самолета, но когда я иду для сохранения информации (перечисляющий все в текстовый документ), все, что это дает мне, Шестнадцатеричное местоположение данных а не фактических строк.

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

Существует ли способ поместить класс в классе? или я должен буду сделать один супер класс Плеера, который обрабатывает всю информацию, для которой я использую другие классы?

28
задан Josh Crozier 9 December 2013 в 04:42
поделиться

2 ответа

Мне кажется, вы путаете объекты и классы. Класс внутри класса выглядит так:

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
63
ответ дан 28 November 2019 в 02:24
поделиться

Похоже, что вы говорите об агрегации. Каждый экземпляр вашего класса 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)
28
ответ дан 28 November 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: