Я практикую некоторые объектно-ориентированные назначения, и в этом я хочу наследовать атрибут private родительского класса. Я хочу проверить это с некоторыми условиями. Есть ли способ извлечь значение атрибута private через наследование. Я использовал метод получения, но все еще получаю ошибку.
Я следую этой диаграмме классов:
![class diagram](https://i.stack.imgur.com/D0WNl.jpg)
class Pizzaservice:
counter = 100
def __init__(self, customer, pizza_type, additional_topping):
self.__service_id = None
self.__customer = customer
self.__pizza_type = pizza_type
self.__additional_topping = additional_topping #boolean (T=req)
self.pizza_cost = None
def validate_pizza_type(self):
if(self.get_pizza_type() == "Small" or self.get_pizza_type() == "Medium"):
return True
else:
return False
def calculate_pizza_cost(self):
a = self.validate_pizza_type()
b = self.__customer.validate_quantity()
if(a == True and b == True):
q = self.__customer.get_quantity()
if(self.__pizza_type == "Small"):
if(self.__additional_topping == True):
self.pizza_cost = (150 + 35) * q
else:
self.pizza_cost = 150 * q
elif(self.__pizza_type == "Medium"):
if(self.__additional_topping == True):
self.pizza_cost = (200 + 50) * q
else:
self.pizza_cost = 200 * q
Pizzaservice.counter += 1
self.__service_id = self.__pizza_type[0:1] + str(Pizzaservice.counter)
else:
self.pizza_cost = -1
def get_service_id(self):
return self.__service_id
def get_pizza_type(self):
return self.__pizza_type
def get_customer(self):
return self.__customer
def get_additional_topping(self):
return self.__additional_topping
class Doordelivery(Pizzaservice):
def __init__(self, customer, pizza_type, additional_topping, distance_in_kms):
self.__delivery_charge = None
self.__distance_in_kms = distance_in_kms
def validate_distance_in_kms(self):
if(self.__distance_in_kms >=1 and self.__distance_in_kms <=10):
return True
else:
return False
def calculate_pizza_cost(self):
d = self.validate_distance_in_kms()
if(d == True):
temp = super().calculate_pizza_cost()
if(temp != -1):
if(self.__distance_in_kms <= 5):
self.__delivery_charge = 5 * self.__distance_in_kms
self.pizza_cost = self.pizza_cost + self.__delivery_charge
else:
self.__delivery_charge = 25 + (7 * (self.__distance_in_kms - 5))
self.pizza_cost = self.pizza_cost + self.__delivery_charge
else:
self.pizza_cost = -1
def get_delivery_charge(self):
return self.__delivery_charge
def get_distance_in_kms(self):
return self.__distance_in_kms
class Customer:
def __init__(self, customer_name, quantity):
self.__customer_name = customer_name
self.__quantity = quantity
def validate_quantity(self):
if(self.__quantity >= 1 and self.__quantity <= 5):
return True
else:
return False
def get_customer_name(self):
return self.__customer_name
def get_quantity(self):
return self.__quantity
c = Customer("Sanya", 2)
obj_1 = Pizzaservice(c, "Small", True)
obj_2 = Doordelivery(c, "Small", True, 2)
obj_1.calculate_pizza_cost()
obj_2.calculate_pizza_cost()
Я получаю эту ошибку:
Traceback (последний вызов был последним):
строка 89, в
obj_2.calculate_pizza_cost ()
строка 56, в Calculate_pizza_cost
temp = super (). Calculate_pizza_cost ()
строка 15, в Calculate_pizza_cost
a = self.validate_pizza_type ()
строка 10, в validate_pizza_type
if (self.get_pizza_type () == "Маленький" или self.get_pizza_type () == "Средний"):
строка 38, в get_pizza_type
вернуть себя .__ pizza_type
AttributeError: у объекта 'Doordelivery' нет атрибута'_Pizzaservice__pizza_type '
Разве я не понимаю часть наследования? Какую процедуру следует выполнить, чтобы исправить это?