Python 2.6: 类中的类?
大家好,我遇到一个问题,就是我想知道怎么把一个类放到另一个类里面。
我现在有一个关于飞机的类,这个类里包含了飞机的各种数据,比如它能飞多快、能飞多远、油耗等等。然后我还有一个航班类,这个类里记录了航班的所有细节:距离、起始地点和时间、结束地点和时间、持续时间等等。
但是我意识到每架飞机都有多个航班,那为什么不把所有的航班数据放到飞机类里呢?不过,我不知道怎么把一个类放到另一个类里面,这样我就可以像这样调用:
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 个回答
在编程中,有时候我们会遇到一些问题,像是代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有些地方不对,或者是我们没有正确理解某些概念。
比如,有些人可能在使用某个函数时,输入的参数不符合要求,导致程序崩溃。这个时候,我们需要仔细检查代码,看看是不是哪里写错了,或者是参数的类型和数量是否正确。
另外,有时候我们也需要查阅一些文档或者教程,来帮助我们理解如何正确使用某些工具或函数。这样可以避免很多不必要的错误,让我们的代码运行得更顺利。
总之,编程就像解谜一样,需要耐心和细心。遇到问题时,不要着急,慢慢分析,找到解决办法。
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
听起来你在说的是聚合。你的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)
我觉得你可能把对象和类搞混了。一个类里面再有一个类的写法是这样的:
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