.. include:: global.rst ============================================= 12: Single Inheritance ============================================= Summary ============ - Inheritance is at its most basic about code reuse - OOP has a number of different philosophies that attempt to motivate its use. - The most common is that classes should model the real world - the domain model - The domain model has to be hierarchial because single inheritance creates class hierarchies; the problem is that the world isn't a simple hierarchy - The four pillars of OOP are classes, inheritance, encapsulation, and polymorphism - Python allows multiple inheritance, but you can restrict your use of it to single inheritance if you want to - Inheritance in Python is a simple extension of the way attributes are resolved - First the instance class is created, then the class, then the base class, and then its base class, and so on until the attribute is located - Attributes can be overridden by simplify defining them in the class that inherits - The super() built-in function can be used to return an attribute from the first class in the inheritance chain to define it - The inheritance chain is defined in the class's __mro__ attribute - super() works by searching the __mro__ for the first class to define the method - You can specify the class that has the __mro__ to use and the starting class for the search - If you restrict yourself to single inheritance you can dispense with super() and access the attribute directly, but with multiple inheritance this simple approach doesn't work - Metaclasses can also be a part of an inheritance chain and there are rules for which metaclass is used. Program ============ .. literalinclude:: programs/chapterTwelve.py :language: python Program Output ================= .. code-block:: console