Python 2.6: 类中的类?

33 投票
3 回答
110313 浏览
提问于 2025-04-16 01:07

大家好,我遇到一个问题,就是我想知道怎么把一个类放到另一个类里面。

我现在有一个关于飞机的类,这个类里包含了飞机的各种数据,比如它能飞多快、能飞多远、油耗等等。然后我还有一个航班类,这个类里记录了航班的所有细节:距离、起始地点和时间、结束地点和时间、持续时间等等。

但是我意识到每架飞机都有多个航班,那为什么不把所有的航班数据放到飞机类里呢?不过,我不知道怎么把一个类放到另一个类里面,这样我就可以像这样调用:

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

有没有办法把一个类放到另一个类里面?还是说我需要做一个超级的玩家类,来处理我用其他类管理的所有信息?

3 个回答

1

在编程中,有时候我们会遇到一些问题,像是代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有些地方不对,或者是我们没有正确理解某些概念。

比如,有些人可能在使用某个函数时,输入的参数不符合要求,导致程序崩溃。这个时候,我们需要仔细检查代码,看看是不是哪里写错了,或者是参数的类型和数量是否正确。

另外,有时候我们也需要查阅一些文档或者教程,来帮助我们理解如何正确使用某些工具或函数。这样可以避免很多不必要的错误,让我们的代码运行得更顺利。

总之,编程就像解谜一样,需要耐心和细心。遇到问题时,不要着急,慢慢分析,找到解决办法。

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
29

听起来你在说的是聚合。你的player类的每一个实例可以包含零个或多个Airplane的实例,而每个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)
68

我觉得你可能把对象和类搞混了。一个类里面再有一个类的写法是这样的:

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

撰写回答