Создание объектов внутри класса в python

63
10

Итак, у меня есть этот класс в 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)

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

функция iter существует, поэтому я могу перебирать ее, например

mansion=House(10)

for i in mansion:
print i.get_room_num()

спросил(а) 2021-01-19T15:46:27+03:00 2 месяца, 3 недели назад
1
Решение
87

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

ответил(а) 2021-01-19T15:46:27+03:00 2 месяца, 3 недели назад
87

Там нет ничего плохого в том, что у вас есть. Есть ли способ лучше? Ну, вы можете использовать понимание списка, я думаю:

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)

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

ответил(а) 2021-01-19T15:46:27+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема