Here's a snippet of the code where the parent class is Apparel
. Apparel
has an attribute __price
. I next define a class Cotton
that inherits from class Apparel
.
I use super()
to invoke the parent methods.
class Apparel:
def __init__(self,price,item_type):
self.__price = price
self.__item_type = item_type
def calculate_price(self):
self.__price = self.__price + 0.05*self.__price
Snippet of class Cotton
:
class Cotton(Apparel):
def __init__(self,price,discount):
self.__discount = discount
super().__init__(price,"Cotton")
def calculate_price(self):
super().calculate_price()
self.__price = self.__price - self.__discount
def get_price(self):
return self.__price
Having invoked the parent method using super()
, I expect that the attribute __price
from the parent will be available to the child in that particular method. However, I get an error on running this:
c1 = Cotton(25000,2500)
c1.calculate_price()
print (c1.get_price())
And, the error is as follows: AttributeError: 'Cotton' object has no attribute '_Cotton__price'
If it is due to name mangling, how to keep the attributes "super private" at the same time access the attributes in the child classes.
I tried several variations like trying to access __price
by using Apparel.__price
instead of self.__price
in class Cotton
, still does not work. Trying to check if am being silly somewhere, still can't figure out.