2012-06-07 4 views
1

Так у меня есть этот класс в питонаСоздание объектов внутри одного класса в Python

class room (object): 

    def __init__(self,number): 
     self.room_number=number 

    def get_room_num(self): 
     return self.room_number 

И у меня есть еще один класс под названием Дом, в основном, когда я создать объект дома, я также необходимо создать комнаты объекты для дома , и количество комнат будет выбрано пользователем.

У меня возникли трудности с созданием динамических объектов (поскольку он указан пользователем, у нас будет 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) 

есть лучший способ сделать это ?, если да, пожалуйста, помогите

функция ИТЭР будет там, так что я могу перебрать его, например,

mansion=House(10) 

for i in mansion: 
    print i.get_room_num() 
+2

Кстати, если вы просто ищете общий обзор кода, и не имеют конкретный вопрос, вы могли бы рассмотреть codereview.stackexchange.com – kojiro

+0

@kojiro благодарит вас – Rave

ответ

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) 

Это, по сути, стилистические изменения. Как я уже сказал, я не вижу ничего плохого в том, что у вас есть.

3
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 
Смежные вопросы