#python #class #inheritance
#python #класс #наследование
Вопрос:
Прежде всего, я буквально не мог придумать лучшего названия для этого вопроса, поэтому, пожалуйста, потерпите меня.
В настоящее время я пишу программу на Python, которая имеет 3 класса (1 родительский и 2 дочерних класса), где пользователя просят описать различные функции автомобиля или пикапа, чтобы впоследствии добавить транспортное средство в виртуальный гараж (словарь). В зависимости от того, какой тип транспортного средства выбран, будут заданы некоторые общие вопросы, а также конкретные вопросы, относящиеся к типу транспортного средства:
class Vehicle:
def __init__(self):
self.vehicle_type_request = int(input("Hello! Press 1 to add a Car to your garage or 2 to add a Pickup: "))
self.make = input("Please enter the make of your vehicle: ")
self.model = input("Please enter the model of your vehicle: ")
self.color = input("Please enter the color of your vehicle: ")
self.fuel_type = input("Please enter the fuel type: ")
self.options = []
def welcome_message(self):
if self.vehicle_type_request == 1:
self.vehicle_type_request = Cars()
else:
self.vehicle_type_request = Pickup()
return self.vehicle_type_request
Однако, как только все сказано и сделано, моя программа выдает мне это. После того, как он задает последний вопрос «Пожалуйста, выберите любые применимые параметры транспортного средства:», он возвращается к первому вопросу:
Hello! Press 1 to add a Car to your garage or 2 to add a Pickup: 1
Please enter the make of your vehicle: test
Please enter the model of your vehicle: test
Please enter the color of your vehicle: test
Please enter the fuel type: test
Please choose any applicable vehicle options: test
Hello! Press 1 to add a Car to your garage or 2 to add a Pickup: 1
Please enter the make of your vehicle: test
Please enter the model of your vehicle: test
Please enter the color of your vehicle: test
Please enter the fuel type: test
Please enter the engine size: test
How many doors does your vehicle have? 2
Hello! Press 1 to add a Car to your garage or 2 to add a Pickup: 2
Please enter the make of your vehicle: test
Please enter the model of your vehicle: test
Please enter the color of your vehicle: test
Please enter the fuel type: test
Please enter the cab style: test
Please enter the bed length: test
Process finished with exit code 0
Теоретически программа должна была перейти к конкретным вопросам, касающимся транспортного средства, в зависимости от того, какой вариант выбрал пользователь. Выберите 1, вы получите:
class Cars(Vehicle):
def __init__(self):
super().__init__()
**self.engine_size = float(input("Please enter the engine size: "))
self.num_doors = int(input("How many doors does your vehicle have? "))**
def get_engine_size(self):
return self.engine_size
def get_num_doors(self):
return self.num_doors
Или:
получение класса (транспортное средство):
def __init__(self):
super().__init__()
self.cab_style = input("Please enter the cab style: ")
self.bed_length = float(input("Please enter the bed length: "))
def get_cab_style(self):
return self.cab_style
def get_bed_length(self):
return self.bed_length
Будет ли это иметь какое-либо отношение к тому, как вызываются функции?
new_vehicle = Vehicle()
new_vehicle.get_make()
new_vehicle.get_model()
new_vehicle.get_color()
new_vehicle.get_fuel_type()
new_vehicle.get_options()
new_vehicle_car = Cars()
new_vehicle_car.get_engine_size()
new_vehicle_car.get_num_doors()
new_vehicle_pickup = Pickup()
new_vehicle_pickup.get_cab_style()
new_vehicle_pickup.get_bed_length()
Любая помощь будет оценена. Вот вся моя программа до сих пор, вместо отдельных фрагментов:
class Vehicle:
def __init__(self):
self.vehicle_type_request = int(input("Hello! Press 1 to add a Car to your garage or 2 to add a Pickup: "))
self.make = input("Please enter the make of your vehicle: ")
self.model = input("Please enter the model of your vehicle: ")
self.color = input("Please enter the color of your vehicle: ")
self.fuel_type = input("Please enter the fuel type: ")
self.options = []
def welcome_message(self):
if self.vehicle_type_request == 1:
self.vehicle_type_request = Cars()
else:
self.vehicle_type_request = Pickup()
return self.vehicle_type_request
def get_make(self):
return self.make
def get_model(self):
return self.model
def get_color(self):
return self.color
def get_fuel_type(self):
return self.fuel_type
def get_options(self):
self.options = input("Please choose any applicable vehicle options: ")
class Cars(Vehicle):
def __init__(self):
super().__init__()
self.engine_size = float(input("Please enter the engine size: "))
self.num_doors = int(input("How many doors does your vehicle have? "))
def get_engine_size(self):
return self.engine_size
def get_num_doors(self):
return self.num_doors
class Pickup(Vehicle):
def __init__(self):
super().__init__()
self.cab_style = input("Please enter the cab style: ")
self.bed_length = float(input("Please enter the bed length: "))
def get_cab_style(self):
return self.cab_style
def get_bed_length(self):
return self.bed_length
new_vehicle = Vehicle()
new_vehicle.get_make()
new_vehicle.get_model()
new_vehicle.get_color()
new_vehicle.get_fuel_type()
new_vehicle.get_options()
new_vehicle_car = Cars()
new_vehicle_car.get_engine_size()
new_vehicle_car.get_num_doors()
new_vehicle_pickup = Pickup()
new_vehicle_pickup.get_cab_style()
new_vehicle_pickup.get_bed_length()
Комментарии:
1. серьезно посмотрите
welcome_message
, экземпляр родительского класса имеет члены, которые являются экземплярами дочерних классов, не делайтеinput()
этого в конструкторе, это не позволяет вам использовать разные источники, такие как файлы2. если вы говорите, что поток программы — это не то, что вы хотите, также сообщите, что вы ожидаете, что программа должна делать.
Ответ №1:
Я предлагаю OP следовать лучшему руководству по изучению Python / программированию. Я не знаю, с чего начать, чтобы научить вас основам программирования, но я могу перечислить несколько замечаний о том, где вы ошиблись:
- В коде
.get_**()
функции не имеют абсолютно никакого эффекта. Вы можете удалить строки и заметить, что программа ведет себя точно так же. - Поток не пошел назад, программа сделала именно то, что вы сказали ей делать. В
new_vehicle = Vehicle()
,new_vehicle_car = Cars()
иnew_vehicle_pickup = Pickup()
, каждый раз, когда он запрашивает у вас все входные данные (всего 3 раза). Вы можете удалить некоторые строки, чтобы увидеть эффект.
Учиться программировать — это очень весело, я только хочу оказать некоторую помощь здесь. Я предлагаю OP понять больше основ, прежде чем пытаться связываться с классом.