at firstthis composition relationship looks less natural than the inheritance-based relationships howeverit has the advantage of allowing us to add new types of contributions without adding new class to the design inheritance is most useful when the subclasses have some kind of specialization specialization is creating or changing attributes or behaviors on the subclass to make it somehow different from the parent class it seems silly to create bunch of empty classes solely for identifying different types of objects (this attitude is less prevalent among java and other "everything is an objectprogrammersbut it is common among more practical python designersif we look at the inheritance version of the diagramwe can see bunch of subclasses that don' actually do anythingauthor actor libraryitem +title +upc +subject +contributors contributor +name director +locate(artist editor sometimes it is important to recognize when not to use object-oriented principles this example of when not to use inheritance is good reminder that objects are just toolsand not rules exercises this is practical booknot textbook as suchi' not about to assign you bunch of fake object-oriented analysis problems to create designs for bunch of fake object-oriented problems to analyze and design insteadi want to give you some thoughts that you can apply to your own projects if you have previous objectoriented experienceyou won' need to put much effort into these howeverthey are useful mental exercises if you've been using python for whilebut never really cared about all that class stuff