在python中创建一个Class内的对象

时间:2012-06-07 02:32:54

标签: python oop class object

所以我在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()

2 个答案:

答案 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)

这些基本上是风格上的变化。正如我所说,我认为你所拥有的一切都没有错。