#python #python-3.x #class #oop #inheritance
#python #python-3.x #класс #ооп #наследование
Вопрос:
Я получил этот вопрос от моего друга, который является студентом первого курса CS.
Вопрос: Реализуйте дизайн Xiaomi
классов и Huawei
классов, которые наследуются от SmartPhone
class, чтобы следующий код генерировал вывод ниже:
Данный код:
class SmartPhone:
def __init__(self, name):
self.name = name
def check(self):
print(“The phone is working properly”)
#Write your code here
f = Xiaomi(“Redmi Note 8”)
c = Huawei(“Y9”)
f.check()
print(“=========================”)
c.check()
print(“=========================”)
Вывод должен быть:
This is Xiaomi Redmi Note 8
The phone is working properly
=========================
This is Huawei Y9
The phone is working properly
=========================
Мое решение:
class SmartPhone:
def __init__(self, name):
self.name = name
def check(self):
print(self.__str__()) #changing parent class
print('The phone is working properly')
#Write your code here
class Xiaomi(SmartPhone):
def __str__(self):
return f'This is Xiaomi {self.name}'
class Huawei(SmartPhone):
def __str__(self):
return f'This is Huawei {self.name}'
f = Xiaomi('“Redmi Note 8”')
c = Huawei('“Y9”')
f.check()
print('=========================')
c.check()
print('=========================')
Мое решение обеспечивает корректный вывод в соответствии с требованиями путем изменения родительского класса. Но было сказано не изменять родительский класс SmartPhone
и создавать только дочерние классы для получения того же результата. Итак, как я могу получить результат без изменения родительского SmartPhone
класса?
Комментарии:
1.
def check(self): print('This is Xiaomi ...'); super().check()
…? Переопределитеcheck
метод в каждом дочернем элементе, чтобы вывести это дополнительное сообщение перед вызовом исходного родительского метода …?2. Понял. Большое спасибо. Я забыл вызвать суперфункцию.
Ответ №1:
Что вам нужно, так это реализовать check
метод, вызывающий родительский метод:
class SmartPhone:
def __init__(self, name):
self.name = name
def check(self):
print(“The phone is working properly”)
#Write your code here
class Xiaomi(SmartPhone):
def check(self):
print(f"This is Xiaomi {self.name}")
super().check()
class Huawei(SmartPhone):
def check(self):
print(f"This is Huawei {self.name}")
super().check()
f = Xiaomi(“Redmi Note 8”)
c = Huawei(“Y9”)
f.check()
print(“=========================”)
c.check()
print(“=========================”)
Комментарии:
1. Понял. Большое спасибо.
Ответ №2:
Вам нужно вызвать super при переопределении метода из суперкласса. Это значит,
def check(self):
print(f"This is Xiaomi {self.name}")
super.check()
// codes for overriding