Python 2.6: класс внутри класса? - PullRequest
28 голосов
/ 11 июля 2010

Привет всем, моя проблема в том, что я пытаюсь выяснить, как получить класс ВНУТРИ другого класса.

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

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

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

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

Ответы [ 3 ]

63 голосов
/ 11 июля 2010

Я думаю, что вы путаете объекты и классы. Класс внутри класса выглядит следующим образом:

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
28 голосов
/ 11 июля 2010

Похоже, вы говорите о агрегации . Каждый экземпляр вашего 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)
0 голосов
/ 26 октября 2017
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...