Python 2.6:类中的类?

Pil*_*824 29 python class

嘿大家,我的问题是我试图弄清楚如何获得INSIDE课程.

我正在做的是我有一个飞机课程,其中包括飞行速度,飞行距离,油耗等等所有统计数据.然后我有一个飞行班,这是有关航班的所有细节:距离,起始位置和时间,结束位置和时间,持续时间等.

但我意识到每架飞机都有多个航班,为什么不把所有的飞行数据都放到飞机上呢?虽然我怎么把一个类INTO放到另一个类,所以我可以调用这样的东西:

Player1.Airplane5.Flight6.duration = 5 hours
Run Code Online (Sandbox Code Playgroud)

我有点用飞机类完成它,但当我去保存信息(将所有内容列入文本文档)时,它给我的全部是数据的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
Run Code Online (Sandbox Code Playgroud)

有没有办法把类放在一个类中?或者我需要制作一个超级播放器类来处理我使用其他类的所有信息?

Mar*_*tos 64

我认为你混淆了对象和类.类中的类看起来像这样:

class Foo(object):
    class Bar(object):
        pass

>>> foo = Foo()
>>> bar = Foo.Bar()
Run Code Online (Sandbox Code Playgroud)

但它并不像我想要的那样.也许你是在一个简单的包含层次结构之后:

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
        ...
Run Code Online (Sandbox Code Playgroud)

然后,您可以构建和使用对象:

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
Run Code Online (Sandbox Code Playgroud)


Joh*_*web 28

听起来你在谈论聚合.您的player类的每个实例可以包含零个或多个实例Airplane,而这些实例又可以包含零个或多个实例Flight.您可以使用内置list类型在Python中实现此功能,以便使用数字保存命名变量.

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)
Run Code Online (Sandbox Code Playgroud)