所以我在python中有这个类
class room (object):
def __init__(self,number):
self.room_number=number
def get_room_num(self):
return self.room_number
我还有另一个名为House的课程,基本上当我创建房子对象时,我还需要为房子创建房间对象,并且用户将选择房间数量。
我很难创建动态对象(因为它是由用户指定的,我们将有1个房间或10个房间),我不能给每个房间对象一个名字,因为我不知道如何许多事先有。
所以我试过这个
class House (object):
def __init__(self,num_of_rooms):
self.room_holder=[]
for i in range(num_of_rooms):
self.room_holder.append(room(i))
def __iter__(self):
return iter(self.room_holder)
有更好的方法吗?如果有,请帮助
iter 函数在那里我可以迭代它,例如
mansion=House(10)
for i in mansion:
print i.get_room_num()
答案 0 :(得分:4)
class Room(object): # note: class name is Capitalized
def __init__(self, number):
self.number = number
# get_ methods are non-Pythonic.
# If you need to do some processing to retrieve room number,
# make it a @property; otherwise, just use the field name
class House(object):
def __init__(self, num_rooms):
# I assume you don't want a room 0?
self.rooms = [Room(i) for i in range(1, num_rooms+1)]
def __iter__(self):
return iter(self.rooms)
mansion = House(10)
for room in mansion:
print room.number
答案 1 :(得分:3)
你在那里有什么不对。有没有更好的办法?好吧,你可以使用列表理解,我想:
class House(object):
def __init__(self, num_rooms):
self.rooms=[room(i) for i in xrange(num_rooms)]
def __iter__(self):
return iter(self.rooms)
这些基本上是风格上的变化。正如我所说,我认为你所拥有的一切都没有错。