Public inheritance of an attribute implies inheriting the name and visibility of said attribute. But the subclass can place stronger semantics on inherited attributes. Those can lead to new invariants ...
In the code above, Example and Example2 behave exactly the same way. The no-argument super() effectively fills in the class and self. If we take a slightly more complex hierarchy from part 1, we can ...