Home > Store

Python Programming with Design Patterns

eBook (Watermarked)

  • Your Price: $27.19
  • List Price: $33.99
  • Includes EPUB and PDF
  • About eBook Formats
  • This eBook includes the following formats, accessible from your Account page after purchase:

    ePub EPUB The open industry format known for its reflowable content and usability on supported mobile devices.

    Adobe Reader PDF The popular standard, used most often with the free Acrobat® Reader® software.

    This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.

Also available in other formats.

Register your product to gain access to bonus material or receive a coupon.



  • Covers all of Python's principal features with working examples.
  • Covers all 23 Design Patterns with visual GUI examples to make the algorithms clearer.
  • Written in an accessible style.
  • Covers use of six different development environments with recommendations.
  • Complete downloadable code for all examples provided on GitHub.


  • Copyright 2022
  • Pages: 352
  • Edition: 1st
  • eBook (Watermarked)
  • ISBN-10: 0-13-757979-9
  • ISBN-13: 978-0-13-757979-2

Improve Your Python Code with Modern Object-Oriented Design Patterns

To write clean, efficient, maintainable code, developers everywhere turn to design patterns. Now there's a Python-specific patterns guide that's friendly and practical enough for every Python developer, regardless of experience.

Best-selling patterns author James W. Cooper presents visual, example-driven explanations of 23 proven patterns for writing superior object-oriented code. Through clear and intuitive code samples, he introduces modern techniques for creating Python objects that interact effectively in powerful, flexible programs. Python newcomers--including those moving from other languages--will find a succinct introduction designed to get them up to speed fast.

Cooper's wide-ranging patterns coverage addresses abstract classes, multiple inheritance, GUI programming and widgets, graphical classes, drawing and plotting, math, databases, Python decorators, images, threads, iterators, creating executable code, and more. Throughout, his informal visual presentation makes patterns far easier to work with--so you can confidently build sophisticated programs that use Python's rich capabilities.

  • Review the essentials of Python objects and visual programming
  • Learn what design patterns are, and how they help you write better code
  • Use creational patterns to enhance flexibility and avoid unnecessary complexity
  • Apply structural patterns to ensure that program elements work together well in large programs
  • Optimize communication between objects with behavioral patterns

Sample Content

Sample Pages

Download the sample pages (includes Chapter 4)

Table of Contents

Preface     xxi
The tkinter Library     2
GitHub     2
Chapter 1  Introduction to Objects     5
The Class __init__ Method     6
Variables Inside a Class     6
Collections of Classes     7
Inheritance     8
Derived Classes Created with Revised Methods     8
Multiple Inheritance     8
Drawing a Rectangle and a Square     10
Visibility of Variables     12
    Properties     13
    Local Variables     13
Types in Python     13
Summary     14
Programs on GitHub     15
Chapter 2  Visual Programming in Python     17
Importing Fewer Names     19
Creating an Object-Oriented Version     19
Using Message Boxes     21
Using File Dialogs     22
Understanding Options for the Pack Layout Manager     23
Using the ttk Libraries     24
Responding to User Input     25
    Adding Two Numbers     26
    Catching the Error     26
Applying Colors in tkinter     27
Creating Radio Buttons     27
    Using a Class-Level Variable     30
Communicating Between Classes     30
Using the Grid Layout     30
Creating Checkbuttons     32
    Disabling Check Boxes     32
Adding Menus to Windows     35
Using the LabelFrame     39
Moving On     40
Examples on GitHub     40
Chapter 3  Visual Programming of Tables of Data     41
Creating a Listbox     42
    Displaying the State Data     44
Using a Combobox     46
The Treeview Widget     47
    Inserting Tree Nodes     50
Moving On     51
Example Code on GitHub     51
Chapter 4  What Are Design Patterns?     53
Defining Design Patterns     54
The Learning Process     55
Notes on Object-Oriented Approaches     56
Python Design Patterns     57
References     57

Chapter 5  The Factory Pattern     61
How a Factory Works     61
Sample Code     62
The Two Subclasses     62
Building the Simple Factory     63
    Using the Factory     63
    A Simple GUI     64
Factory Patterns in Math Computation     65
Programs on GitHub     65
Thought Questions     66
Chapter 6  The Factory Method Pattern     67
The Swimmer Class     68
The Event Classes     69
Straight Seeding     70
    Circle Seeding     71
Our Seeding Program     72
Other Factories     74
When to Use a Factory Method     74
Programs on GitHub     74
Chapter 7  The Abstract Factory Pattern     75
A GardenMaker Factory     75
How the User Interface Works     77
Consequences of the Abstract Factory Pattern     77
Thought Questions     78
Code on GitHub     78
Chapter 8  The Singleton Pattern     79
Throwing the Exception     80
Creating an Instance of the Class     80
Static Classes As Singleton Patterns     81
Finding the Singletons in a Large Program     81
Other Consequences of the Singleton Pattern     82
Sample Code on GitHub     82
Chapter 9  The Builder Pattern     83
An Investment Tracker     84
Calling the Builders     86
    The List Box Builder     87
    The Checkbox Builder     88
Displaying the Selected Securities     89
Consequences of the Builder Pattern     89
Thought Questions     89
Sample Code on GitHub     89
Chapter 10  The Prototype Pattern     91
Cloning in Python     91
Using the Prototype     92
Consequences of the Prototype Pattern     94
Sample Code on GitHub     94
Chapter 11  Summary of Creational Patterns     95

Chapter 12  The Adapter Pattern     99
Moving Data Between Lists     99
Making an Adapter     101
    The Class Adapter     103
    Two-Way Adapters     103
    Pluggable Adapters     103
Programs on GitHub     103
Chapter 13  The Bridge Pattern     105
Creating the User Interface     107
Extending the Bridge     108
Consequences of the Bridge Pattern     109
Programs on GitHub     110
Chapter 14  The Composite Pattern     111
An Implementation of a Composite     112
Salary Computation     112
The Employee Classes     112
The Boss Class     113
Building the Employee Tree     114
Printing the Employee Tree     114
Creating a Treeview of the Composite     116
Using Doubly Linked Lists     117
Consequences of the Composite Pattern     118
A Simple Composite     119
Other Implementation Issues     119
    Dealing with Recursive Calls     119
    Ordering Components     120
    Caching Results     120
Programs on GitHub     120
Chapter 15  The Decorator Pattern     121
Decorating a Button     121
Using a Decorator     122
Using Nonvisual Decorators     123
    Decorated Code     124
The dataclass Decorator     125
Using dataclass with Default Values     126
Decorators, Adapters, and Composites     126
Consequences of the Decorator Pattern     126
Programs on GitHub     127
Chapter 16  The Facade Pattern     129
Building the Façade Classes     131
Creating Databases and Tables     135
Using the SQLite Version     136
Consequences of the Façade     137
Programs on GitHub     137
Notes on MySQL     137
Using SQLite     138
References     138
Chapter 17  The Flyweight Pattern     139
What Are Flyweights?     139
Example Code     140
Selecting a Folder     142
Copy-on-Write Objects     143
Program on GitHub     143
Chapter 18  The Proxy Pattern     145
Using the Pillow Image Library     145
Displaying an Image Using PIL     146
Using Threads to Handle Image Loading     146
Logging from Threads     149
Copy-on-Write     149
Comparing Related Patterns     149
Programs on GitHub     150
Chapter 19  Summary of Structural Patterns     151

Chapter 20  Chain of Responsibility Pattern     155
When to Use the Chain     156
Sample Code     156
The Listboxes     159
Programming a Help System     160
Receiving the Help Command     161
The First Case     162
A Chain or a Tree?     163
Kinds of Requests     164
Consequences of the Chain of Responsibility     164
Programs on GitHub     165
Chapter 21  The Command Pattern     167
When to Use the Command Pattern     167
Command Objects     168
A Keyboard Example     168
Calling the Command Objects     170
Building Command Objects     171
The Command Pattern     172
Consequences of the Command Pattern     172
Providing the Undo Function     172
    Creating the Red and Blue Buttons     175
    Undoing the Lines     175
Summary     176
References     176
Programs on GitHub     176
Chapter 22  The Interpreter Pattern     177
When to Use an Interpreter     177
Where the Pattern Can Be Helpful     177
A Simple Report Example     178
Interpreting the Language     179
How Parsing Works     180
    Sorting Using attrgetter()     181
    The Print Verb     182
The Console Interface     182
The User Interface     183
Consequences of the Interpreter Pattern     184
Programs on GitHub     185
Chapter 23  The Iterator Pattern     187
Why We Use Iterators     187
Iterators in Python     187
A Fibonacci Iterator     188
    Getting the Iterator     189
Filtered Iterators     189
The Iterator Generator     191
A Fibonacci Iterator     191
Generators in Classes     192
Consequences of the Iterator Pattern     192
Programs on GitHub     193
Chapter 24  The Mediator Pattern     195
An Example System     195
Interactions Between Controls     197
Sample Code     198
Mediators and Command Objects     199
Consequences of the Mediator Pattern     200
Single Interface Mediators     200
Programs on GitHub     201
Chapter 25  The Memento Pattern     203
When to Use a Memento     203
Sample Code     204
Consequences of the Memento Pattern     209
Programs on GitHub     209
Chapter 26  The Observer Pattern     211
Example Program for Watching Colors Change     212
The Message to the Media     215
Consequences of the Observer Pattern     215
Programs on GitHub     215
Chapter 27  The State Pattern     217
Sample Code     217
Switching Between States     221
How the Mediator Interacts with the State
State Transitions     224
Programs on GitHub     224
Chapter 28  The Strategy Pattern     225
Why We Use the Strategy Pattern     225
Sample Code     226
The Context     227
The Program Commands     227
The Line and Bar Graph Strategies     228
Consequences of the Strategy Pattern     230
Programs on GitHub     231
Chapter 29  The Template Pattern     233
Why We Use Template Patterns     233
Kinds of Methods in a Template Class     234
Sample Code     234
    Drawing a Standard Triangle     235
    Drawing an Isosceles Triangle     236
The Triangle Drawing Program     237
Templates and Callbacks     238
Summary and Consequences     238
Example Code on GitHub     238
Chapter 30  The Visitor Pattern     239
When to Use the Visitor Pattern     239
Working with the Visitor Pattern     241
Sample Code     241
Visiting Each Class     242
Visiting Several Classes     242
Bosses Are Employees, Too     243
Double Dispatching     245
Traversing a Series of Classes     245
Consequences of the Visitor Pattern     245
Example Code on GitHub     245

Chapter 31  Variables and Syntax in Python     249
Data Types     250
Numeric Constants     250
Strings     250
Character Constants     251
Variables     252
Complex Numbers     253
Integer Division     253
Multiple Equal Signs for Initialization     254
A Simple Python Program     254
Compiling and Running This Program     255
Arithmetic Operators     255
    Bitwise Operators     255
Combined Arithmetic and Assignment Statements     256
Comparison Operators     256
The input Statement     257
PEP 8 Standards     258
    Variable and Function Names     258
    Constants     258
    Class Names     258
    Indentation and Spacing     259
    Comments     259
    Docstrings     259
String Methods     260
Examples on GitHub     261
Chapter 32  Making Decisions in Python     263
elif is else if     263
Combining Conditions     264
The Most Common Mistake     264
Looping Statements in Python     265
    The for Loop and Lists     265
    Using range in if Statements     266
Using break and continue     266
    The continue Statement     267
Python Line Length     267
The print Function     267
Formatting Numbers     268
    C and Java Style Formatting     269
    The format string Function     269
    f-string Formatting     269
    Comma-Separated Numbers     270
    Strings     270
Formatting Dates     271
Using the Python match Function     271
    Pattern Matching     272
Reference     273
Moving On     273
Sample Code on GitHub     273
Chapter 33  Development Environments     275
IDLE     275
Thonny     275
PyCharm     276
Visual Studio     276
Other Development Environments     276
    LiClipse     276
    Jupyter Notebook     277
    Google Colaboratory     277
    Anaconda     277
    Wing     278
Command-Line Execution     278
CPython, IPython, and Jython     278
Chapter 34  Python Collections and Files     279
Slicing     279
Slicing Strings     280
    Negative Indexes     281
    String Prefix and Suffix Removal     281
Changing List Contents     281
Copying a List     282
Reading Files     282
    Using the with Loop     283
Handling Exceptions     284
Using Dictionaries     284
    Combining Dictionaries     286
Using Tuples     286
Using Sets     287
Using the map Function     287
Writing a Complete Program     288
    Impenetrable Coding     288
Using List Comprehension     289
Sample Programs on GitHub     290
Chapter 35  Functions     291
Returning a Tuple     292
Where Does the Program Start?     292
Summary     293
Programs on GitHub     293
Appendix A  Running Python Programs     295
If You Have Python Installed     295
    Shortcuts     295
Creating an Executable Python Program     296
Command-Line Arguments     297
Index     299


Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information

To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.


Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.


If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information

Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.


This site is not directed to children under the age of 13.


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information

If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information

Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents

California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure

Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact

Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice

We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020