Challenge - 5 Problems
Name Mangling Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
What is the output of this code using name mangling?
Consider this Python class with a double underscore attribute. What will be printed when accessing the mangled attribute directly?
Python
class MyClass: def __init__(self): self.__hidden = 42 obj = MyClass() print(obj._MyClass__hidden)
Attempts:
2 left
💡 Hint
Double underscore attributes are renamed internally with the class name prefix.
✗ Incorrect
Python changes names starting with double underscores by adding _ClassName prefix to avoid name clashes. So __hidden becomes _MyClass__hidden.
❓ Predict Output
intermediate2:00remaining
What error does this code raise when accessing a double underscore attribute?
What happens if you try to access a double underscore attribute directly without name mangling?
Python
class Test: def __init__(self): self.__secret = 'hidden' obj = Test() print(obj.__secret)
Attempts:
2 left
💡 Hint
Double underscore attributes are renamed internally, so direct access fails.
✗ Incorrect
Accessing obj.__secret fails because the attribute is stored as _Test__secret internally, so __secret is not found.
🧠 Conceptual
advanced2:00remaining
Why does Python use name mangling for double underscore attributes?
Choose the best explanation for why Python applies name mangling to attributes starting with double underscores.
Attempts:
2 left
💡 Hint
Think about inheritance and attribute name conflicts.
✗ Incorrect
Name mangling helps avoid attribute name conflicts in subclasses by changing the attribute name internally.
❓ Predict Output
advanced2:00remaining
What is the output of this code with inheritance and name mangling?
Given these classes, what will be printed?
Python
class Base: def __init__(self): self.__value = 'Base' class Derived(Base): def __init__(self): super().__init__() self.__value = 'Derived' obj = Derived() print(obj._Base__value) print(obj._Derived__value)
Attempts:
2 left
💡 Hint
Each class has its own mangled attribute name.
✗ Incorrect
The Base class attribute is stored as _Base__value and Derived class attribute as _Derived__value, so both exist separately.
🔧 Debug
expert2:00remaining
Why does this code fail to update the intended attribute?
This code tries to update a double underscore attribute in a subclass but fails. Why?
Python
class Parent: def __init__(self): self.__data = 10 class Child(Parent): def __init__(self): super().__init__() self.__data = 20 obj = Child() print(obj._Parent__data)
Attempts:
2 left
💡 Hint
Remember that name mangling depends on the class where the attribute is defined.
✗ Incorrect
Child's __data is stored as _Child__data, separate from Parent's _Parent__data, so Parent's attribute remains 10.