Python2.6:类内的类?

2024-04-29 00:59:12 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,大家好,我的问题是我想知道如何让一个班进入另一个班。

我正在做的是,我有一个关于飞机飞行速度、飞行距离、油耗等所有统计数据的班级。然后我有一个飞行类,它是关于飞行的所有细节:距离、开始位置和时间、结束位置和时间、持续时间等等。

但是我意识到每架飞机都有多个航班,所以为什么不把所有的航班数据都放到飞机类中呢?尽管我如何将一个类放入另一个类中,以便可以调用如下内容:

Player1.Airplane5.Flight6.duration = 5 hours

我在airplane类中做了一些工作,但是当我去保存信息(将所有内容都列在文本文档中)时,它给我的只是数据的十六进制位置,而不是实际的字符串。

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

有没有办法把一个班放在一个班里?或者我需要创建一个超级玩家类来处理im使用其他类的所有信息?


Tags: 数据self距离内容stock时间classtotal
3条回答

听起来你说的是聚合。类的每个实例可以包含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)
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

我认为你混淆了对象和类。类中的类如下所示:

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

相关问题 更多 >