in this complete formand despite their relatively small sizesour classes capture nearly all the important concepts in python' oop machineryinstance creation--filling out instance attributes behavior methods--encapsulating logic in class' methods operator overloading--providing behavior for built-in operations like printing customizing behavior--redefining methods in subclasses to specialize them customizing constructors--adding initialization logic to superclass steps most of these concepts are based upon just three simple ideasthe inheritance search for attributes in object treesthe special self argument in methodsand operator overloading' automatic dispatch to methods along the waywe've also made our code easy to change in the futureby harnessing the class' propensity for factoring code to reduce redundancy for examplewe wrapped up logic in methods and called back to superclass methods from extensions to avoid having multiple copies of the same code most of these steps were natural outgrowth of the structuring power of classes by and largethat' all there is to oop in python classes certainly can become larger than thisand there are some more advanced class conceptssuch as decorators and metaclasseswhich we will meet in later in terms of the basicsthoughour classes already do it all in factif you've grasped the workings of the classes we've writtenmost oop python code should now be within your reach other ways to combine classes having said thati should also tell you that although the basic mechanics of oop are simple in pythonsome of the art in larger programs lies in the way that classes are put together we're focusing on inheritance in this tutorial because that' the mechanism the python language providesbut programmers sometimes combine classes in other waystoo for examplea common coding pattern involves nesting objects inside each other to build up composites we'll explore this pattern in more detail in which is really more about design than about python as quick examplethoughwe could use this composition idea to code our manager extension by embedding personinstead of inheriting from it the following alternativecoded in file person-composite pydoes so by using the __get attr__ operator overloading method to intercept undefined attribute fetches and delegate them to the embedded object with the getattr built-in the getattr call was introduced in --it' the same as attribute fetch notation and thus per more realistic example