Подтвердить что ты не робот

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, который обрабатывает всю информацию, которую им используют другие классы?

4b9b3361

Ответ 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