I'm having some trouble when inheriting Shape class which has private instance variables (color, filled).
the given code is:
class Shape:
def __init__(self, color = "y", filled = True):
self.__color = color
self.__filled = filled
def __str__(self):
return f'({self.__color},{self.__filled})'
class Circle(Shape):
def __init__(self, color, filled, radius):
super().__init__(color, filled)
self.__radius = radius
def __str__(self):
return f"({self.__color},{self.__filled})(radius = {self.__radius})"
print(Circle("b",True,5))
and the result is:
return f"({self.__color},{self.__filled})(radius = {self.__radius})"
AttributeError: 'Circle' object has no attribute '_Circle__color'
I checked the variables of the Circle instance by using https://pythontutor.com
and the visualizer shows like this :
python tutor visualizer
So Circle instance has 3 attributes- _Circle__radius, _Shape__color, and _Shape__filled.
When I removed all the underscores to change private variables into public, the visualizer shows that the Circle instance has attributes of color, filled, and radius. (python tutor visualizer)
I think the constructor of the superclass makes the difference when initializing private variables, but there was no explanation of how exactly does it work.
What is the difference and why does it work like that? and, is there any way to solve the problem while keeping variables private?