Чистое ООП на Python
столкнулся с такой проблемой нужно при каждом вызове конструктора init что бы переменная self.name добавлялась в один общий список. Реализовал с помощью for но не работает, не могу понять почему. 2 проблема. Считается ли правильным использование так много строчек кода с созданием новых объектов и как этот код можно уменьшить
class I_am:
def __init__(self , money , carrying):
self.money = money
self.carrying = carrying
def money_down(self):
pass
class Town:
def __init__(self , name , distance):
self.name = name
self.distance = distance
random_town_spisok = []
for town in self.name:
random_town_spisok.append(self.name)
print(random_town_spisok)
class Product:
def __init__(self, name, weight, quality, price):
self.name = name
self.weight = weight
self.quality = quality
self.price = price
self.spisok = []
# for Product in self.name:
# self.spisok.append(self.name)
# print(self.spisok)
# Товар = деньги и грузоподъёмность
def product_money(self, money, carrying):
# Проверка на количество денег
if money.money >= self.price:
money.money = money.money - self.price
print(f"Мы купили {self.name} за {self.price} биткоинов, на счету осталось {money.money} биткоинов!")
else:
print(f"Кошелек пуст")
exit()
#Проверка на грузоподъёмность
if carrying.carrying >= self.weight:
carrying.carrying = carrying.carrying - self.weight
else:
print(f"Машина загружена")
exit()
Info = I_am(100, 70)
Towm_one = Town('Moskov', 100)
Towm_two = Town('Almaty', 60)
Towm_tree = Town('Talgar', 50)
Towm_four = Town('Taraz', 80)
Towm_five = Town('Rostov', 90)
Product_one = Product('Мясо', 10, 1, 10)
Product_two = Product('Сухофрукты', 2, 1, 8)
Product_tree = Product('Зерно', 7, 1, 10)
Product_four = Product('Мука', 8, 1, 10)
Product_five = Product('Ткань', 20, 1, 16)
Product_six = Product('Краска', 20, 1, 7)
Product_one.product_money(Info, Info)
Product_two.product_money(Info, Info)
Product_tree.product_money(Info, Info )
Product_four.product_money(Info , Info)
Product_five.product_money(Info, Info)
Ответы (1 шт):
А зачем вообще здесь цикл for town in self.name? Он разобьёт название города на буквы и затем random_town_spisok.append(self.name) в цикле добавит название города в список столько раз, сколько букв в этом названии. Ну и random_town_spisok у вас локальная переменная, так что она нигде не сохранится после завершения функции __init__().
По второму вопросу - используйте циклы и списки.
class I_am:
def __init__(self , money , carrying):
self.money = money
self.carrying = carrying
def money_down(self):
pass
class Town:
random_town_spisok = []
def __init__(self , name , distance):
self.name = name
self.distance = distance
Town.random_town_spisok.append(self.name)
print(Town.random_town_spisok)
class Product:
def __init__(self, name, weight, quality, price):
self.name = name
self.weight = weight
self.quality = quality
self.price = price
self.spisok = []
# for Product in self.name:
# self.spisok.append(self.name)
# print(self.spisok)
# Товар = деньги и грузоподъёмность
def product_money(self, money, carrying):
# Проверка на количество денег
if money.money >= self.price:
money.money = money.money - self.price
print(f"Мы купили {self.name} за {self.price} биткоинов, на счету осталось {money.money} биткоинов!")
else:
print(f"Кошелек пуст")
exit()
#Проверка на грузоподъёмность
if carrying.carrying >= self.weight:
carrying.carrying = carrying.carrying - self.weight
else:
print(f"Машина загружена")
exit()
info = I_am(100, 70)
towns = [Town(*args) for args in (('Moskov', 100),
('Almaty', 60),
('Talgar', 50),
('Taraz' , 80),
('Rostov', 90)
)]
products = [Product(*args) for args in (('Мясо' , 10, 1, 10),
('Сухофрукты', 2, 1, 8),
('Зерно' , 7, 1, 10),
('Мука' , 8, 1, 10),
('Ткань' , 20, 1, 16),
('Краска' , 20, 1, 7)
)]
for prod in products:
prod.product_money(info, info)