<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
<title type="text">Bhoj Karki</title>
<subtitle type="text">Writing on data engineering, backend systems and machine learning, by Bhoj Karki.</subtitle>
<generator uri="https://www.11ty.dev/">Eleventy</generator>
<link rel="self" type="application/atom+xml" href="https://www.bhojkarki.com.np/feed.xml" />
<link rel="alternate" type="text/html" href="https://www.bhojkarki.com.np/" />
<updated>2024-08-06T12:00:00.000Z</updated>
<id>https://bhojkarki.com.np/</id>
<author><name>Bhoj Karki</name><uri>https://www.bhojkarki.com.np/</uri></author>
<entry>
  <title type="html">Converting Multiple DateTime formate into Single Uniform format using Python and Pandas</title>
  <link rel="alternate" type="text/html" href="https://www.bhojkarki.com.np/Converting-Multiple-DateFormat-into-uniform-date-in-python/" />
  <id>https://bhojkarki.com.np/Converting-Multiple-DateFormat-into-uniform-date-in-python</id>
  <published>2024-08-06T12:00:00.000Z</published>
  <updated>2024-08-06T12:00:00.000Z</updated>
  <summary type="text">Imagine you are receiving data for an ETL pipeline from multiple sources, each with a different datetime format for when the items are created. Through the ETL process, this data is collected into a single Excel file where you must convert…</summary>
  <content type="html">&lt;p&gt;Problem Statement:&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Imagine you are receiving data for an ETL pipeline from multiple sources, each with a different datetime format for when the items are created. Through the ETL process, this data is collected into a single Excel file where you must convert the datetime values to a standard format before inserting them into the data warehouse.&lt;/p&gt;
&lt;p&gt;Assume you have datetime values in five different formats:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;2024-02/05&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;02/01/2024&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;02/16-2024 10:01:35&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;02 22 2024&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Your output should be a standard format such as:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;pre class=&quot;shiki&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;2024-02-22 00:00:00
2024-02-16 10:01:35
2024-02-05 00:00:00
2024-02-01 00:00:00
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Solution:&lt;/p&gt;
&lt;p&gt;We can use python pandas to convert the list of dates into data frame and then use apply function to apply parse date function. The parse date function uses python datetime.strptime() function.&lt;/p&gt;
&lt;p&gt;We can use Python Pandas to convert the list of dates into a DataFrame and then use the &lt;code&gt;apply&lt;/code&gt; function to apply the&lt;code&gt;parse_date&lt;/code&gt;function. The&lt;code&gt;parse_date&lt;/code&gt;function utilizes Python’s&lt;code&gt;datetime.strptime()&lt;/code&gt; function.&lt;/p&gt;
&lt;p&gt;About the &lt;code&gt;datetime.strptime()&lt;/code&gt; class method:
It parses a string into a datetime object given a corresponding format.&lt;/p&gt;
&lt;p&gt;Syntax:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;strptime&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(date_string, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Code:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; pandas &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; pd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; datetime &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; datetime&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;# Step 1: given dates from questions as input&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;given_date &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;[&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;2024-02/05&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;02/01/2024&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;02/16-2024 10:01:35&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;02 22 2024&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;given_date_df &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; pd&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;DataFrame&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;({&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;date&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;: given_date})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;# Step 2: Define a function to parse and standardize the date format&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; parse_date&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;date_str&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    date_formats &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;%Y-%m/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;%m/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;/%Y&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;%m/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;-%Y %H:%M:%S&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;%m &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; %Y&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; fmt &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; date_formats&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; datetime&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;strptime&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(date_str, fmt)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        except&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    raise&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Invalid format &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;date_str&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;given_date_df&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;parsed_date&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; given_date_df&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;date&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;apply&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(parse_date)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(given_date_df)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                  date         parsed_date&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;           2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;05&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;05&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 00&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;           02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 00&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;  02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;35&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;35&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;           02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 22&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;22&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 00&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&quot;sorting-the-given-values-in-latest-order&quot;&gt;Sorting the given values in latest order&lt;/h1&gt;
&lt;p&gt;Now if you want to sort the values in descending order to get the most recent ones in the top you can do following:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;# Step 4: Sorting the dataframe by the parsed date in descending order&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;sorted_date_df &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; given_date_df&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;sort_values&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(by&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;parsed_date&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, ascending&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;False&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;reset_index&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(drop&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;# Step 5: Display the sorted dataframe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;sorted_date_df&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;date&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;parsed_date&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;date	parsed_date&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;	02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 22&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;	2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;22&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 00&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;	02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;35&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;	2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;35&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;	2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;05&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;	2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;05&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 00&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;	02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;	2024&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;02&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 00&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
</content>
</entry>
<entry>
  <title type="html">Optimizing SQL Query</title>
  <link rel="alternate" type="text/html" href="https://www.bhojkarki.com.np/Optimizing-SQL-Query/" />
  <id>https://bhojkarki.com.np/Optimizing-SQL-Query</id>
  <published>2024-02-16T12:00:00.000Z</published>
  <updated>2024-02-16T12:00:00.000Z</updated>
  <summary type="text">Understanding how to craft optimized SQL queries is essential for a proficient query developer. This article delves into various strategies for composing efficient queries, with a focus on their application in PostgreSQL databases. To…</summary>
  <content type="html">&lt;h2 id=&quot;we-have-used&quot;&gt;We have used:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;PostgreSQL@14 and pgAdmin4&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;assumption-of-audience&quot;&gt;Assumption of audience&lt;/h2&gt;
&lt;p&gt;It is assumed that you(the audience) have a moderate understanding of SQL  language.&lt;/p&gt;
&lt;h2 id=&quot;introduction-and-background&quot;&gt;Introduction and Background&lt;/h2&gt;
&lt;p&gt;Understanding how to craft optimized SQL queries is essential for a proficient query developer. This article delves into various strategies for composing efficient queries, with a focus on their application in PostgreSQL databases. To illustrate these techniques, we will utilize two tables in our demonstration.&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:  department (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	department_id  &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;serial&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; primary key&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	department_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;varchar&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;not null&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;: employee_detail (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	emp_id  &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;serial&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;, &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	emp_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;VARCHAR&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;NOT NULL&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;, &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	dob  &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;DATE&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; not NULL&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	department_id &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;, &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;	foreign key&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(department_id) &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;references&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; department(department_id) &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;on delete&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; NULL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The department table has 5 rows and the employee_detail has 1000101(one million one hundred and one) records. I added large records to see the effect on execution time. For demo purposes, we will be using pgAdmin 4 which also gives execution time.&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://www.bhojkarki.com.np/images/my_post_images/2024_department_image.png&quot; width=&quot;2002&quot; height=&quot;1680&quot; alt=&quot;department table&quot;&gt;
&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://www.bhojkarki.com.np/images/my_post_images/2024_employee_detail_image.png&quot; width=&quot;2002&quot; height=&quot;1680&quot; alt=&quot;employee detail table&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;tip-1-writing-sargable-query&quot;&gt;Tip 1: Writing Sargable Query&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sargable&lt;/strong&gt;: A Sargable query short for “Search ARGument ABLE” is a query that can utilize the indexes in the database to optimize the query process. The Sargable query utilizes the argument that can take advantage of indexes(if it exists) to make the query faster.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Non-Sargable&lt;/strong&gt;: A non-sargable query can not utilize the indexes even if it is present. The most common way to make a query non-sargable is to put the column inside a function in the where clause.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Let’s look at some of the examples:&lt;/p&gt;
&lt;h3 id=&quot;example1-original-query-non-sargable&quot;&gt;Example1: Original query (Non-Sargable):&lt;/h3&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; extract(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Year&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; dob)&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;2000&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance:Total query runtime: 861 msec and 970098 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;improved-query-sargable&quot;&gt;Improved query (Sargable):&lt;/h3&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; FROM&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;01-01-2000&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;01-01-2001&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 541 msec and 970098 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;example2-original-query-non-sargable&quot;&gt;Example2: Original query (Non-Sargable):&lt;/h3&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; DATE_PART(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;year&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;, current_date) &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; DATE_PART(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;year&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;, dob) &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 30&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 206 msec. 10001 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;improved-query-sargable-1&quot;&gt;Improved query (Sargable):&lt;/h3&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail  &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; current_date &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; INTERVAL &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;30 year&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 97 msec. 10001 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;example3-original-query-non-sargable&quot;&gt;Example3: Original query (Non-Sargable):&lt;/h3&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; coalesce&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(emp_name, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Name22&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Name22&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 93 msec. 10001 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;improved-query-sargable-2&quot;&gt;Improved query (Sargable):&lt;/h3&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Name22&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; or&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; null&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 63 msec. 10001 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;tip2-using-indexes-to-improve-performance&quot;&gt;Tip2: Using Indexes to improve performance.&lt;/h3&gt;
&lt;p&gt;The purpose of the indexes is to increase the query performance. Let’s look at a query before and after an index has been added.&lt;/p&gt;
&lt;h3 id=&quot;original-query&quot;&gt;Original Query:&lt;/h3&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name, dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;like&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;Name%&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;before-index-performance&quot;&gt;Before index performance:&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 354 msec. 1000101 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h4 id=&quot;after-index-performance&quot;&gt;After index performance:&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 337 msec.1000101 rows affected.&lt;/em&gt;
Here due to indexing we can see that the performance has improved.&lt;/p&gt;
&lt;h3 id=&quot;tip-3-use-explicit-column-name-in-place-of-&quot;&gt;Tip 3: Use explicit column name in place of *&lt;/h3&gt;
&lt;p&gt;If you are extracting all the columns then use * in the select statement, however, if you want to pull only certain column use column names.&lt;/p&gt;
&lt;h4 id=&quot;pulling-all-the-columns--is-better&quot;&gt;Pulling all the columns (* is better):&lt;/h4&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;Select&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 513 msec. 1000101 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_id, emp_name, dob, department_id &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 571 msec. 1000101 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here emp_id, emp_name, dob, and department_id are all the columns and we can see the * operation in this case performs better.&lt;/p&gt;
&lt;h4 id=&quot;pulling-only-some-columns-column-names-is-better&quot;&gt;Pulling only some columns (column names is better)&lt;/h4&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name, dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 364 msec. 1000101 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here if we pull only emp_name and dob column we can see that the query time is much less compared to * operation&lt;/p&gt;
&lt;h3 id=&quot;tip-4-use-where-statement-in-place-of-having&quot;&gt;Tip 4: Use WHERE statement in place of HAVING:&lt;/h3&gt;
&lt;p&gt;In group by statement we are to use the HAVING clause for filtering, however, we can also use where before group by to first filter the data and then use group by for grouping.&lt;/p&gt;
&lt;p&gt;Having said that, there are some conditions where HAVING is absolutely necessary, in those cases only using HAVING. For instance, the filter is by aggregating certain column values.&lt;/p&gt;
&lt;h4 id=&quot;original-query-1&quot;&gt;Original Query:&lt;/h4&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; count&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(emp_id) &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_count, emp_name, dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;group by&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; dob, emp_name&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;having&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;like&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;Name%&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 169 msec.101 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h4 id=&quot;improved-query&quot;&gt;Improved Query:&lt;/h4&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; count&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(emp_id) &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_count, emp_name, dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;like&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;Name%&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;group by&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; dob, emp_name;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 140 msec. 101 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;tip-5-using-join-properly&quot;&gt;Tip 5: Using join properly&lt;/h3&gt;
&lt;h3 id=&quot;tip-51-joining-big-table-to-smaller-one&quot;&gt;Tip 5.1: Joining Big table to smaller one&lt;/h3&gt;
&lt;p&gt;While joining tables, putting the bigger table before the join statement makes the performance faster. Here, employee_detail is a larger table (one million + records) than department table(5 records).&lt;/p&gt;
&lt;h4 id=&quot;joining-in-pattern---big-table---small-table&quot;&gt;Joining in pattern - big table - small table&lt;/h4&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name, dob, department_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;inner join&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; department &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail.department_id &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; department.department_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: This below query took 478 msec; 1000101 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h4 id=&quot;joining-in-pattern---small-table---big-table&quot;&gt;Joining in pattern - small table - big table&lt;/h4&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name, dob, department_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; department&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;inner join&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail.department_id &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; department.department_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 494 msec.1000101 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Both the above query do the same thing and only the order here is changed. If we know which one is a big table and which one is smaller, putting a big table in front of the join statement can improve performance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;tip-52-avoid-using-multiple-or-statements-in-a-join-statement&quot;&gt;Tip 5.2 Avoid using multiple OR statements in a join statement&lt;/h3&gt;
&lt;p&gt;If you have two or more OR statements in the ON operator, using a single operator for joining and making multiple queries which are joined by union all would provide better performance.&lt;/p&gt;
&lt;h4 id=&quot;example&quot;&gt;Example:&lt;/h4&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; column1, column2, columnN table1 t1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;inner join&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; table2 t2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; t1.column1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;t2.column1 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;OR&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; t1.column2 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; t2.column2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;This can be broken down into&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;  column1, column2, columnN table1 t1 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;inner join&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; table2 t2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; t1.column1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;t2.column1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;UNION ALL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; column1, column2, columnN table1 t1 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;inner join&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; table2 t2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; t1.column2 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; t2.column2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;tip-6-replacing-multiple-or-statement-with-in&quot;&gt;Tip 6: Replacing multiple OR statement with IN&lt;/h3&gt;
&lt;p&gt;If you are using multiple OR statements to filter out data, comparing those values using IN statements is much more efficient.&lt;/p&gt;
&lt;h4 id=&quot;original-query-2&quot;&gt;Original Query:&lt;/h4&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_id &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;Name11&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; or&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;Name22&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; or&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Name33&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 94 msec. 30003 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h4 id=&quot;improved-query-1&quot;&gt;Improved Query:&lt;/h4&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_id &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Name11&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Name22&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Name33&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 91 msec. 30003 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;tip-7-using-union-all-over-union&quot;&gt;Tip 7: Using UNION ALL Over UNION&lt;/h3&gt;
&lt;p&gt;The union all and union both are used to combine results from two or more queries. The UNION ALL combines data as it is, without filtering for distinct elements. The UNION combines data and also filters for unique values so that the combined result will have only distinct items.&lt;/p&gt;
&lt;p&gt;Both of these are doing separate tasks one is just combining and another is combining as well as filtering for distinct items. We can not compare them if they are providing different outputs. However, if in case we know that 2 result sets are unique to each other then using UNION ALL in place of UNION will improve query performance.&lt;/p&gt;
&lt;p&gt;Let’s check by combining result from same table:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name, dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;UNION ALL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name, dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 649 msec.2000202 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name, dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;UNION&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name, dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 1 secs 24 msec.101 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here we can see that the outputs are completely different numbers of rows, however, the key point is since the UNION is also performing filtering operations it takes more time.&lt;/p&gt;
&lt;h3 id=&quot;tip-8-using-limit-to-extract-data&quot;&gt;Tip 8: Using LIMIT to extract data&lt;/h3&gt;
&lt;p&gt;Most of the time, we see data in parts, not all at once. It’s like flipping through pages. Only when there’s not too much data does it show up all together. That’s when using LIMIT comes in handy, saving us time by grabbing just the right amount we need.&lt;/p&gt;
&lt;h4 id=&quot;original-query-3&quot;&gt;Original Query:&lt;/h4&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name, dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 364 msec. 1000101 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h4 id=&quot;improved-query-2&quot;&gt;Improved Query:&lt;/h4&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; emp_name, dob &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; employee_detail &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;LIMIT&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Performance: Total query runtime: 65 msec. 50 rows affected.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;In this article, we looked at some of the ways to make SQL query better. These are some techniques, there are still more techniques based on optimizing subqueries, improving through partition and sharding, and utilizing stored procedures for optimizing SQL queries which we will examine in future articles.&lt;/p&gt;
</content>
</entry>
<entry>
  <title type="html">Implementing github hook to run jenkins job on a local machine</title>
  <link rel="alternate" type="text/html" href="https://www.bhojkarki.com.np/Jenkins-with-githubhooks/" />
  <id>https://bhojkarki.com.np/Jenkins-with-githubhooks</id>
  <published>2020-08-31T12:00:00.000Z</published>
  <updated>2020-08-31T12:00:00.000Z</updated>
  <summary type="text">In this article you will see how you can implement github hook and run your jenkin’s job running on you local computer. As you already know in order for github hook to trigger you need a valid internet ip address or domain name. You can…</summary>
  <content type="html">&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;
&lt;p&gt;In this article you will see how you can implement github hook and run your jenkin’s job running on you local computer. As you already know in order for github hook to trigger you need a valid internet ip address or domain name. You can not use localhost:8080( default port for jenkin’s job) on github hoook.&lt;/p&gt;
&lt;h3 id=&quot;what-is-jenkins-and-github-hook&quot;&gt;What is jenkins and github hook?&lt;/h3&gt;
&lt;p&gt;In the world of continuous integration and continuous delivery(CI/CD) git and jenkins are important tools. Jenkins is a tool to automate jobs and run or build your program based on various configuration such as run it periodically on fix time, or run it using github hook or be it triggered using a callback url from remote machine, etc. This makes jenkins suitable for building your program and testing it. Git helps to integrate our code and thus helps various developer to collaborate on a single project. This fulfills the CI part of CI/CD portion. Jenkins helps in pulling your code from version control system and build them using Jenkin’s jobs.&lt;/p&gt;
&lt;h3 id=&quot;how-to-set-up-jenkins&quot;&gt;How to set up jenkins?&lt;/h3&gt;
&lt;p&gt;Setting up jenkins is simple you need to have java installed, and you can download jenkins from jenkins website(&lt;a href=&quot;https://www.jenkins.io/doc/book/installing/&quot;&gt;Downlaod Jenkins&lt;/a&gt; ). Jenkins supports windows, Linux, and Mac, you can download for your operating system. Once you download and install it it automatically runs in port 8080 i.e localhost:8080.
After installation you need to get the secrete key from mention location when you type localhost:8080 and enter it in the box after that you need to create a user and login via that user.&lt;/p&gt;
&lt;h2 id=&quot;creating-a-job-to-be-triggered&quot;&gt;Creating a job to be triggered:&lt;/h2&gt;
&lt;p&gt;To create a job follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;login to the jenkins web interface using localhost:8080/&lt;/li&gt;
&lt;li&gt;create jenkins job using create new item&lt;/li&gt;
&lt;li&gt;select free style porject for creting job and save it.
&lt;br/&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://www.bhojkarki.com.np/images/my_post_images/2020_08_3_new_item.png&quot; width=&quot;1344&quot; height=&quot;644&quot; /&gt;
&lt;br/&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;add a description and save if for now. You will have to come back later to change these configuration.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After this steps let’s setup github to support hook trigger.
Follow these steps to create github.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;create a github repository (you will need to have github account)&lt;/li&gt;
&lt;li&gt;Let’s add a index.html file in it.&lt;/li&gt;
&lt;li&gt;make a clone of it in your local machine and link it to remote repository.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For now this is all we have to do.
Let’s come to the important stuff. How are we going to link github to our localhost:8080 as our jenkins is hosted in local machine. Welcome to the world of ngrok. The ngrok is an awesome tool it let’s you expose you local machine port to the internet through it’s server.&lt;/p&gt;
&lt;h2 id=&quot;setup-ngrok-in-local-machine&quot;&gt;Setup ngrok in local machine.&lt;/h2&gt;
&lt;p&gt;Follow these steps to setup&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;download ngrok for your machine. &lt;a href=&quot;https://ngrok.com/download&quot;&gt;Download ngrok&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Create an ngrok account you need an api to identify your machine and run ngrok properly.&lt;/li&gt;
&lt;li&gt;Login to ngrok and get the secrete key&lt;/li&gt;
&lt;li&gt;Go to the directory where ngrok is download and unzip it and then run these commands(if you are in linux you have to unzip ngrok)
&lt;ol&gt;
&lt;li&gt;unzip /path/to/ngrok.zip (For unzipping ngrok, after that go inside the unzip foloder)&lt;/li&gt;
&lt;li&gt;./ngrok authtoken &amp;lt;  your secrete key here &amp;gt;&lt;/li&gt;
&lt;li&gt;./ngrok help&lt;/li&gt;
&lt;li&gt;./ngrok http 8080&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After this you will get an ngrok url link which maps to your localhost:8080 port.
Some thing like this
https://a5131490f792.ngrok.io -&amp;gt; http://localhost:8080&lt;br&gt;
This links updates everytime you run it. If you run another time you will get a different link like this
&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://www.bhojkarki.com.np/images/my_post_images/2020-08-31_ngrok.png&quot; width=&quot;986&quot; height=&quot;427&quot;&gt;&lt;br&gt;
You can now use this ngrok link( https://a5131490f792.ngrok.io  ) and add it in github for web hooks.&lt;/p&gt;
&lt;h2 id=&quot;finishing-github-part&quot;&gt;Finishing github part.&lt;/h2&gt;
&lt;p&gt;You have added a repo and pushed to the github now got to settings and click on webhooks section.
Once you are there you click on add web hook
and link the ngrook in you github webhooks like this
&lt;br/&gt;&lt;/p&gt;
&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://www.bhojkarki.com.np/images/my_post_images/2020-08-31_github_webhook.png&quot; width=&quot;1292&quot; height=&quot;541&quot;/&gt;
&lt;p&gt;After that click on webhooks and it will be saved. By default github will tirggers this on every push request to the github.
Now back to jenkins, let’s configure githubhooks&lt;/p&gt;
&lt;h2 id=&quot;finishing-jenkins-part&quot;&gt;Finishing jenkins part&lt;/h2&gt;
&lt;p&gt;Follow these steps&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;go to your job previously created&lt;/li&gt;
&lt;li&gt;go to configuration&lt;/li&gt;
&lt;li&gt;Go to Source code manage management and link your github repot to jenkins. Let’s see my java program which is a public repo being attacted to jenkins
&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://www.bhojkarki.com.np/images/my_post_images/from%202020-08-31_link_github.png&quot; width=&quot;1214&quot; height=&quot;633&quot;/&gt;&lt;/li&gt;
&lt;li&gt;Go to Build triggers and check &lt;strong&gt;GitHub hook trigger for GITScm polling&lt;/strong&gt;
&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://www.bhojkarki.com.np/images/my_post_images/2020-08-31_build_tirggers.png&quot; width=&quot;1301&quot; height=&quot;639&quot; /&gt;&lt;/li&gt;
&lt;li&gt;When ever there is push to the repo this hook will be triggered and your reposetory code will be downloaded.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That’s it !  Now everytime you make push to your github repo this jenkins job will be automatically triggered and pull code from github. You can add scripts to build you project and many more configuration.&lt;/p&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;In conclusion, in this article you saw how to link your jenkins running on local machine to be triggered using github hook.&lt;/p&gt;
</content>
</entry>
<entry>
  <title type="html">Design pattern in python- part4  Behavioral Pattern</title>
  <link rel="alternate" type="text/html" href="https://www.bhojkarki.com.np/Design-pattern-in-python-part4-Behavioral-pattern/" />
  <id>https://bhojkarki.com.np/Design-pattern-in-python-part4-Behavioral-pattern</id>
  <published>2020-08-22T12:00:00.000Z</published>
  <updated>2020-08-22T12:00:00.000Z</updated>
  <summary type="text">Behavioral desing pattern is concerned communication between objects. Lets look at some of the examples of Behavioral pattern in this article.</summary>
  <content type="html">&lt;h2 id=&quot;behavioral-pattern&quot;&gt;Behavioral Pattern&lt;/h2&gt;
&lt;p&gt;Behavioral desing pattern is concerned communication between objects. Lets look at some of the examples of Behavioral pattern in this article.&lt;/p&gt;
&lt;h3 id=&quot;chain-of-responsibility-desgin-pattern&quot;&gt;Chain of responsibility desgin pattern:&lt;/h3&gt;
&lt;p&gt;The chain of responsibility pattern is used to achieve loose coupling in software where a
specified request from the client is passed through a chain of objects included in it. It helps in
building a chain of objects. The request enters from one end and moves from one object to another.Let’s look at an example below:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; ReportFormat&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        PDF &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        TEXT &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Report&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; format_&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;title &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;Monthly report&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;text &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Things are going&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;really, really well.&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;format_ &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; format_&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Handler&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;nextHandler &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; handle&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; request&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;nextHandler&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;handle&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(request)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; PDFHandler&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Handler&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; handle&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; request&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; request&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;format_ &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ReportFormat&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;PDF&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;output_report&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(request.title, request.text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            else&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;                super&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(PDFHandler, self).&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;handle&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(request)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; output_report&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; title&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; text&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;&amp;#x3C;html&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39; &amp;#x3C;head&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39; &amp;#x3C;title&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&amp;#x3C;/title&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt; title)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39; &amp;#x3C;/head&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39; &amp;#x3C;body&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; line &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; text&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39; &amp;#x3C;p&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&amp;#x3C;/p&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt; line)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39; &amp;#x3C;/body&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;&amp;#x3C;/html&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; TextHandler&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Handler&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; handle&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; request&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; request&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;format_ &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ReportFormat&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;output_report&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(request.title, request.text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            else&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;                super&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(TextHandler, self).&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;handle&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(request)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; output_report&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; title&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; text&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;*&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt; title &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;*&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; line &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; text&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(line)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; ErrorHandler&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Handler&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; handle&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; request&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;Invalid request&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; __name__&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;__main__&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        report &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Report&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(ReportFormat.TEXT)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        pdf_handler &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; PDFHandler&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        text_handler &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; TextHandler&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        pdf_handler&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;nextHandler &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; text_handler&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        text_handler&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;nextHandler &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; ErrorHandler&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        pdf_handler&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;handle&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(report)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Shell&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    *****Monthly&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; report*****&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Things&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; are&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; going&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    really,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; really&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; well.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;observer-desgin-pattern&quot;&gt;Observer desgin pattern:&lt;/h3&gt;
&lt;p&gt;In this pattern, objects are represented as observers that wait for an event to trigger.Let’s look at an example below:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; threading&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Downloader&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;threading&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Thread&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;downloading...&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;i &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; i&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                time&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;sleep&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;fun fun&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;Hellow world&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Worker&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;threading&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Thread&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;            # print(&quot;worker&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;working running ... &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{}{}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#92;n&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(i, t.i))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                time&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;sleep&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                t&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;done&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    t &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Downloader&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    t&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;----------sleep---------&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    time&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;sleep&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    t1 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Worker&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    t1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    t2 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Worker&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    t2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    t3 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Worker&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    t3&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Shell&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    ----------sleep---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    downloading...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    working&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 11&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    working&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 11&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    working&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 11&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    fun&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; fun&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    fun&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; fun&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    fun&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; fun&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    fun&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; fun&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    working&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 24&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    working&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 24&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    working&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 24&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    working&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 34&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    working&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 34&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    working&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 34&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    working&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 44&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    working&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 44&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    working&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 44&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;In conclusion, it is always a good idea to know about software design patter because it let’s us find solution to common problem in efficient way.&lt;/p&gt;
&lt;p&gt;There are some criticism of design pattens as well. As an avid reader we should be aware of both the positive and negative aspect of design pattern. As quoted in &lt;a href=&quot;https://en.wikipedia.org/wiki/Design_Patterns#Criticism&quot;&gt;Wikepedia&lt;/a&gt; one criticism is layed out as &amp;quot; A primary criticism of Design Patterns is that its patterns are simply workarounds for missing features in C++, replacing elegant abstract features with lengthy concrete patterns, essentially becoming a “human compiler” or “generating by hand the expansions of some macro”&amp;quot;
There are other criticism as well but as a developer it’s more fruitful to know about these design pattern concepts as they are commonly used in day to day life.&lt;/p&gt;
&lt;p&gt;You can also search for more patter implementation in the web as this article has only some major ones.&lt;/p&gt;
</content>
</entry>
<entry>
  <title type="html">Design pattern in python- part3 Structural Pattern</title>
  <link rel="alternate" type="text/html" href="https://www.bhojkarki.com.np/Design-pattern-in-python-part3-Structural-pattern/" />
  <id>https://bhojkarki.com.np/Design-pattern-in-python-part3-Structural-pattern</id>
  <published>2020-08-22T12:00:00.000Z</published>
  <updated>2020-08-22T12:00:00.000Z</updated>
  <summary type="text">Structural desing pattern is concerned with class and object composition. They use inheritance to compose interfaces and declare ways to compose object to get the desired new functionality. Lets look at some of the examples of Structural…</summary>
  <content type="html">&lt;h2 id=&quot;structural-pattern&quot;&gt;Structural Pattern&lt;/h2&gt;
&lt;p&gt;Structural desing pattern is concerned with class and object composition. They use inheritance to compose interfaces and declare ways to compose object to get the desired new functionality. Lets look at some of the examples of Structural pattern in this article.&lt;/p&gt;
&lt;h3 id=&quot;adaptor-desgin-pattern&quot;&gt;Adaptor desgin pattern:&lt;/h3&gt;
&lt;p&gt;This pattern allows incompatible interfaces to work together by wrapping the interfaces around an already existing class. This can be verified via following example:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; EuropeanSocketInterface&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; voltage&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; live&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; neutral&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; earth&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    # adaptee&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Socket&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;EuropeanSocketInterface&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; voltage&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 230&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; live&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; neutral&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; earth&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; USASocketInterface&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; voltage&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; live&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; neutral&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    # this is the adaptor pattern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Adaptor&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;USASocketInterface&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; interface&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__interface &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; interface&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; voltage&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 110&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; live&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__interface&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;live&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; neutral&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__interface&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;neutral&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    # client&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; ClientElectricKettle&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; obj&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__power &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; obj&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; boil&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__power&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;voltage&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 110&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;Too hot&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            elif&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__power&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;live&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__power&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;neutral&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;Coffee time&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            else&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;No power&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; __name__&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        socket &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Socket&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        adaptor &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Adaptor&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(socket)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        client &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; ClientElectricKettle&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(adaptor)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        client&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;boil&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;end&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Shell&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;facade-desgin-pattern&quot;&gt;Facade desgin pattern:&lt;/h3&gt;
&lt;p&gt;This pattern provides simplified interfaces to a large body of interfaces.Let’s look at an example below:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _IgnitionSystem&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        @&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;staticmethod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; produce_spark&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _Engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;revs_per_minute &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; turnon&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;revs_per_minute &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 2000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; turnoff&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;revs_per_minute &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _FuelTank&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; level&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_level &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; level&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        @&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;property&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; level&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_level&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        @level&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;setter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; level&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; level&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_level &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; level&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _DashBoardLight&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; is_on&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;False&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_is_on &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; is_on&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __str__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;__class__&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;__name__&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        @&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;property&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; is_on&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_is_on&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        @is_on&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;setter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; is_on&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; status&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_is_on &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; status_check&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_is_on&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;: ON&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(self)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            else&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;: OFF&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(self)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _HandBrakeLight&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;_DashBoardLight&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _FogLampLight&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;_DashBoardLight&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _Dashboard&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;lights &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;handbreak&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _HandBrakeLight&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;fog&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _FogLampLight&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; show&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; light &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;lights&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                light&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;status_check&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    # Facade&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Car&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;ignition_system &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _IgnitionSystem&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;engine &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _Engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;fuel_tank &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _FuelTank&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;dashboard &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; _Dashboard&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        @&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;property&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; km_per_litre&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 17.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; consume_fuel&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; km&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            litres &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; min&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(self.fuel_tank.level, km &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt; self.km_per_litre)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;fuel_tank&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;level &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; litres&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&#92;nStarting...&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;dashboard&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;show&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;ignition_system&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;produce_spark&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;turnon&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            else&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;Can&#39;t start. Faulty ignition system&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; has_enough_fuel&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; km&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; km_per_litre&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            litres_needed &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; km &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; km_per_litre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;fuel_tank&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;level &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; litres_needed&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            else&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; drive&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; km&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&#92;n&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;revs_per_minute &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;                while&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;has_enough_fuel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(km, self.km_per_litre):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                    self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;consume_fuel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(km)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                    print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;Drove &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;km&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(km))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                    print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;:.2f&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;l of fuel still left&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(self.fuel_tank.level))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            else&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;Can&#39;t drive. The Engine is turned off!&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; park&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&#92;nParking...&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;dashboard&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;lights&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;handbreak&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;is_on &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;dashboard&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;show&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;turnoff&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; switch_fog_lights&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; status&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&#92;nSwitching &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; fog lights...&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(status))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            boolean &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; status &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;ON&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;dashboard&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;lights&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;fog&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;is_on &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; boolean&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;dashboard&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;show&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; fill_up_tank&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&#92;nFuel tank filled up!&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;fuel_tank&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;level &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 100&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    # the main function is the Client&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        car &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;drive&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;switch_fog_lights&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;ON&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;switch_fog_lights&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;OFF&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;park&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;fill_up_tank&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;drive&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;drive&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; __name__&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        main&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Shell&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Starting...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    _HandBrakeLight:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; OFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    _FogLampLight:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; OFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    24.12l&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; of&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; fuel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; still&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    18.24l&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; of&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; fuel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; still&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    12.35l&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; of&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; fuel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; still&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    6.47l&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; of&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; fuel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; still&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    0.59l&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; of&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; fuel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; still&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Switching&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ON&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; fog&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; lights...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    _HandBrakeLight:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; OFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    _FogLampLight:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Switching&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; OFF&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; fog&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; lights...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    _HandBrakeLight:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; OFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    _FogLampLight:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; OFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Parking...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    _HandBrakeLight:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    _FogLampLight:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; OFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Fuel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; tank&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; filled&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; up!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Can&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;&#39;t drive. The Engine is turned off!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Starting...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    _HandBrakeLight: ON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    _FogLampLight: OFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    94.12l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    88.24l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    82.35l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    76.47l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    70.59l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    64.71l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    58.82l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    52.94l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    47.06l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    41.18l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    35.29l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    29.41l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    23.53l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    17.65l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    11.76l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    5.88l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Drove 100km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    0.00l of fuel still left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;decorator-desgin-pattern&quot;&gt;Decorator desgin pattern:&lt;/h3&gt;
&lt;p&gt;This pattern dynamically adds/overrides existing method to add new functionality without changing it’s calling style. Let’s look at an example below. In this example we have two files&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;decorator.py&lt;/li&gt;
&lt;li&gt;implement.py&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The decorator.py file has the decorator design pattern code and the implement.py file uses decorator.py method to get Cost, Ingredient, Sales tax for various items.
&lt;br/&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;Code in decorator.py&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; six&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; abc &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ABCMeta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    @six&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;add_metaclass&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(ABCMeta)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; AbstractCoffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_taxes&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 0.1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; ConcreteCoffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;AbstractCoffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;coffee&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 100&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    @six&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;add_metaclass&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(ABCMeta)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; AbstractCoffeeDecorator&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;AbstractCoffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; decorated_coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;decorated_coffee &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; decorated_coffee&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;decorated_coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;decorated_coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Suger&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;AbstractCoffeeDecorator&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;decorated_coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot; ,suger&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;decorated_coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 25&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Milk&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;AbstractCoffeeDecorator&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;decorated_coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot; ,milk&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;decorated_coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 75&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Vanilla&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;AbstractCoffeeDecorator&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;decorated_coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot; ,vanilla&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;decorated_coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 200&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Code in implement.py&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; decorator&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    my_coffee &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; decorator&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;ConcreteCoffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;Ingredients :&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, my_coffee.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;, Cost :&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, my_coffee.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;, Sales Tax :&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,my_coffee.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_taxes&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    my_coffee &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; decorator&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Milk&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(my_coffee)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;Ingredients :&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, my_coffee.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;, Cost :&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, my_coffee.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;, Sales Tax :&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,my_coffee.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_taxes&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    my_coffee &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; decorator&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Vanilla&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(my_coffee)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;Ingredients :&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, my_coffee.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;, Cost :&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, my_coffee.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;, Sales Tax :&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,my_coffee.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_taxes&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    my_coffee &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; decorator&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Suger&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(my_coffee)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;Ingredients :&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, my_coffee.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_ingridents&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;, Cost :&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, my_coffee.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_price&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;, Sales Tax :&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,my_coffee.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_taxes&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now, let’s run implement.py and see the output
Output:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Shell&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Ingredients&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Cost&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 100&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Sales&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Tax&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 10.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Ingredients&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,milk&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Cost&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 175&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Sales&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Tax&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 17.5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Ingredients&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,milk&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,vanilla&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Cost&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 375&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Sales&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Tax&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 37.5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Ingredients&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; coffee&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,milk&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,vanilla&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,suger&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Cost&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 400&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Sales&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Tax&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 40.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;proxy-desgin-pattern&quot;&gt;Proxy desgin pattern:&lt;/h3&gt;
&lt;p&gt;This pattern provides a placeholder for another object to control access, reduce cost, and reduce complexity. Let’s look at an example below.&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Image&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; filename&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_filename &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; filename&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; load_image&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Loading...&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, self._filename)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; display_image&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;display...&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, self._filename)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Proxy&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; subject&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_subject &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_proxystate &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; ImageProxy&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Proxy&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; display_image&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_proxystate &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_subject&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;load_image&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_proxystate &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;Displaying ...&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,self._subject._filename)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    img1 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; ImageProxy&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Image&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;IMAGE_SUB_1&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    img2 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; ImageProxy&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Image&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;IMAGE_SUB_2&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    img1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;display_image&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    img1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;display_image&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    img2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;display_image&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    img2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;display_image&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    img1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;display_image&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    img1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;display_image&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Shell&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Loading...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; IMAGE_SUB_1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Displaying&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; IMAGE_SUB_1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Displaying&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; IMAGE_SUB_1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Loading...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; IMAGE_SUB_2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Displaying&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; IMAGE_SUB_2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Displaying&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; IMAGE_SUB_2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Displaying&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; IMAGE_SUB_1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    Displaying&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; IMAGE_SUB_1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In the next lession we will look at some behaviour design patterns.&lt;/p&gt;
</content>
</entry>
<entry>
  <title type="html">Design pattern in python- part2 Creational Pattern</title>
  <link rel="alternate" type="text/html" href="https://www.bhojkarki.com.np/Design-pattern-in-python-part2-creational-pattern/" />
  <id>https://bhojkarki.com.np/Design-pattern-in-python-part2-creational-pattern</id>
  <published>2020-08-20T12:00:00.000Z</published>
  <updated>2020-08-20T12:00:00.000Z</updated>
  <summary type="text">Lets look at some of the examples of crational pattern in this article.</summary>
  <content type="html">&lt;h2 id=&quot;creational-pattern&quot;&gt;Creational Pattern&lt;/h2&gt;
&lt;p&gt;Lets look at some of the examples of crational pattern in this article.&lt;/p&gt;
&lt;h3 id=&quot;singleton-desgin-pattern&quot;&gt;Singleton desgin pattern:&lt;/h3&gt;
&lt;p&gt;This pattern restricts the creation of instance to one instance. This can be verified via following example:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Singleton&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        __instance &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        @&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;staticmethod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_instance&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; Singleton&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__instance &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;                Singleton&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; Singleton&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__instance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;            # print(self)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;            # print(&quot;type = &quot;, type(self))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; Singleton&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__instance &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;                raise&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; Exception&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;Singleton class !Can&#39;t create multiple objects!&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            else&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                Singleton&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__instance &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    s &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Singleton&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(s)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    s &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; Singleton&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_instance&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(s)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    s &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; Singleton&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_instance&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(s)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    s &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; Singleton&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_instance&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(s)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Shell&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__main__.Singleton object at 0x7f78d1920c&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;50&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__main__.Singleton object at 0x7f78d1920c&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;50&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__main__.Singleton object at 0x7f78d1920c&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;50&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__main__.Singleton object at 0x7f78d1920c&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;50&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;builder-design-pattern&quot;&gt;Builder design pattern:&lt;/h3&gt;
&lt;p&gt;Builder design pattern helps to create complex from simple object by separating construction and representation. Following example illustrates builder design pattern using python:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Builder&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;        &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;        This is like an abstract class&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;        &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_wheel&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_body&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; JeepBuilder&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Builder&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_wheel&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            wheel &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Wheel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            wheel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;size &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 34&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; wheel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            eng &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            eng&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;horsepower &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 770&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; eng&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_body&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            body &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Body&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            body&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;shape &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;Range Rover&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; body&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Director&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        __builder &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__builder &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; b&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_car&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            car &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;set_body&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(self.__builder.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_body&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;            # car.set_wheel(self.__builder.get_wheel())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;set_engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(self.__builder.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;            # set wheel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            i &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            while&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                wheel &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__builder&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_wheel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;set_wheel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(wheel)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;                i &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; car&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    # This one is our main product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Car&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        _body &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        _engine &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        _wheels &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; set_body&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; body&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_body &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; body&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; set_engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; eng&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_engine &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; eng&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; set_wheel&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; wh&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_wheels&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(wh)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_specification&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;body shape = &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;self._body.shape&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;engine horsepower= &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;self._engine.horsepower&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;wheel size = &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;self._wheels[&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;].size&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Wheel&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        size &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Body&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        shape &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;  # e.g SUV&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        horsepower &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; __name__&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;jeep&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        builder &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; JeepBuilder&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        director &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Director&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(builder)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        jeep &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; director&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_car&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;  # return an instance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        jeep&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_specification&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;thanks&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Shell&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    jeep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    body&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; shape&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Range&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; Rover&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    engine&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; horsepower=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 770&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    wheel&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; size&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 34&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    thanks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;factory-design-patter&quot;&gt;Factory design patter:&lt;/h3&gt;
&lt;p&gt;This pattern helps to create object without giving underlying details to client and communicating to those created object via common interfact.
Following example illustrates factory design pattern:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Button&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        html &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;&amp;#x3C;button&gt;&amp;#x3C;/button&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_html&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;html&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Image&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        html &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;&amp;#x3C;img&gt;&amp;#x3C;/img&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Input&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        html &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;&amp;#x3C;input&gt;&amp;#x3C;/input&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Card&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        html &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;&amp;#x3C;obj&gt;&amp;#x3C;/obj&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; ButtonFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; create_button&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; typ&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;            # Note we need to capitalize() because we are passing values in lower case&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; globals&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;[typ&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;capitalize&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    btn &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; ButtonFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    input_list &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;image&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;input&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;card&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; b &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; input_list&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        t &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; btn&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;create_button&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(b).&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_html&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(t)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;img&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;img&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;obj&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;obj&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;prototype-design-pattern&quot;&gt;Prototype design pattern:&lt;/h3&gt;
&lt;p&gt;Prototype design pattern helps to hide the complexity of the instances created by the class via cloning an object. Following example show prototype desing pattern:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; copy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Prototype&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        _type &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        _value &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_type&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_type&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_value&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Type1&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Prototype&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; value&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_type &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;type1&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_value &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; copy&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(self)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Type2&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Prototype&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; value&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_type &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;type2&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;_value &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; copy&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(self)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        __type1value1 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        __type1value2 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        __type2value1 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        __type2value2 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        @&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;staticmethod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; initialize&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__type1value1 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Type1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__type1value2 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Type1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__type2value1 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Type2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;            ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__type2value2 &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Type2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        @&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;staticmethod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_type1_value1&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__type1value1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        @&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;staticmethod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_type1_value2&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__type1value2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        @&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;staticmethod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_type2_value1&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__type2value1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        @&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;staticmethod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; get_type2_value2&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;__type2value2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;starting main&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;        # initialize and call method&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;initialize&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        obj &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_type1_value1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;type= &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;obj.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_type&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;, value = &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;obj.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_value&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        obj &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_type1_value2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;type= &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;obj.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_type&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;, value = &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;obj.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_value&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        obj &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_type2_value1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;type= &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;obj.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_type&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;, value = &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;obj.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_value&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        obj &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ObjectFactory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_type2_value2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;type= &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;obj.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_type&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;, value = &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;obj.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get_value&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;thanks&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; __name__&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;        main&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Shell&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;starting&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; type1,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; value&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; type1,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; value&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; type2,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; value&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; type2,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; value&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;thanks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In the next lession we will look at some structural design pattern.&lt;/p&gt;
</content>
</entry>
<entry>
  <title type="html">Design pattern in python- part1 Introduction</title>
  <link rel="alternate" type="text/html" href="https://www.bhojkarki.com.np/Design-pattern-in-python-part-1/" />
  <id>https://bhojkarki.com.np/Design-pattern-in-python-part-1</id>
  <published>2020-08-19T12:00:00.000Z</published>
  <updated>2020-08-19T12:00:00.000Z</updated>
  <summary type="text">Design patterns are everywhere. When we talk about design pattern the history starts with 4 people, name as gang of four, starts to write software development concepts that are constantly reused in software development. Design pattern are…</summary>
  <content type="html">&lt;h2 id=&quot;we-have-used&quot;&gt;We have used:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Python 3.6+&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;assumption-of-audience&quot;&gt;Assumption of audience&lt;/h2&gt;
&lt;p&gt;It is assumed that you(the audience) have a moderate understanding of programming language. Experience in python will be added advantage.&lt;/p&gt;
&lt;h2 id=&quot;design-patterns&quot;&gt;Design Patterns&lt;/h2&gt;
&lt;p&gt;Design patterns are everywhere. When we talk about design pattern the history starts with 4 people, name as gang of four, starts to write software development concepts that are constantly reused in software development. Design pattern are solution to general software engineering problem. They help to solve problem and make product better. They are not finished products in themself but rather a concepts to solve certain software development problems. This artilce present the design pattern in series of parts and tries to implement them using python programming language. The design pattern can be divided into 3 category and further sub category as shown below:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Creational design pattern&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structural design pattern&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Behaviour design pattern&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Creational design pattern:&lt;/strong&gt; It is the design pattern that deals with the creation of an object. This category has following patterns:&lt;/p&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Design pattern name&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Factory method&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It creates and object without specifying exact class to create&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Abstract Factory&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It groups object factory that have common theme&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;BUilder&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It constructs complex objects by separating construction and representation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Singleton&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It lets only one instance to be created from a class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Prototype&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It creates an object by cloning an existing object&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Structural design pattern:&lt;/strong&gt; It is the design pattern that deals with creation of class structure such as inheritance and composition. It concerns class and object composition.This category has following patterns:&lt;/p&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Design pattern name&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Adaptor&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It helps to interface between two incompatible classes with an adaptor class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Bridge&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It decouples an abstraction from its implementation so that the two can vary independently.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Composite&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It zero or more similar objects so that they can be manipulated as single object.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Decorator&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It adds feature to already existing method without changing it’s calling structure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Facade&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It provides simplified interface for larger body of code.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Flyweight&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It reduces the cost of creating and manipulating a large number of similar objects.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;proxy&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It provides a placeholder for another object to control access and reduce complexity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Behaviour design pattern:&lt;/strong&gt; It is the design pattern that deals with suitable interaction between objects, how to privide lose coupling and how to provide flexibility to extend them in future.This category has following patterns:&lt;/p&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Design pattern name&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Chain of responsibility&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It assigns command to chain of processing objects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Command&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It creates objects which encapsulates actions and parameter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Intrepreter&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It implements a specialized language&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Iterator&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It accesses the elements of an object sequentially without exposing its underlying representation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Mediator&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It allows loose copuling between classes by being mediator who know about detail of both classes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Memento&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It provides the ability to restore an object to its previous state (undo).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Observer&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It implements publisher/subscriber pattern to allow the observer object to see change in events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;State&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It allows an object to change it’s behavior when internal state changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Strategy&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It allows one of a family of algorithms to be selected on-the-fly at runtime.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Template method&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;implements an algorithm as an abstract class, allowing its subclasses to provide concrete behavior.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Visitor&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;It separates an algorithm from an object structure by moving the hierarchy of methods into one object.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
</content>
</entry>
<entry>
  <title type="html">Django class based view vs function based view</title>
  <link rel="alternate" type="text/html" href="https://www.bhojkarki.com.np/django-function-based-view-vs-class-based-view/" />
  <id>https://bhojkarki.com.np/django-function-based-view-vs-class-based-view</id>
  <published>2019-12-26T12:00:00.000Z</published>
  <updated>2019-12-26T12:00:00.000Z</updated>
  <summary type="text">When programming in django we come across a topic of Class Based View(CBV) and Function Based View(FBV). In this article we will discuss about how to use them and which one to use in what scenerio. The point of this article is to give…</summary>
  <content type="html">&lt;h2 id=&quot;we-have-used&quot;&gt;We have used:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Python 3.6+&lt;/li&gt;
&lt;li&gt;django 3.0+&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;assumption-of-audience&quot;&gt;Assumption of audience&lt;/h2&gt;
&lt;p&gt;It is assumed that you(the audience) have a moderate understanding of django and python and you can create models and view.&lt;/p&gt;
&lt;h2 id=&quot;description&quot;&gt;Description&lt;/h2&gt;
&lt;p&gt;When programming in django we come across a topic of Class Based View(CBV) and Function Based View(FBV). In this article we will discuss about how to use them and which one to use in what scenerio. The point of this article is to give Django developer a scenerio when to use FBV over CBV and vice versa.&lt;/p&gt;
&lt;h3 id=&quot;table-of-content&quot;&gt;Table of content&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#model-creation&quot;&gt;Models Creation:&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#fbv&quot;&gt;Function Based view&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#fbv-list-view&quot;&gt;List view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#fbv-detail-view&quot;&gt;Detail View&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#cbv&quot;&gt;Class based view&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#cbv-list-view&quot;&gt;List view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#cbv-detail-view&quot;&gt;Detail view&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#comparision&quot;&gt;Comparision of CBV and FBV&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#conclusion&quot;&gt;Conclusion&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;models-creation&quot;&gt;Models Creation&lt;a name=&quot;model-creation&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To explain this concept lets create a model in django. In this article we will create a simple weather data storage system.&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    # models.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; django&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;db &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; models&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    # Create your models here.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; WeatherData&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;models&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;Model&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        location &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; models&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;CharField&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(max_length&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        temperature &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; models&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;FloatField&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(blank&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, null&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        wind_speed &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; models&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;FloatField&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(blank&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, null&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, help_text&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;in km/hr&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;  # in km/hr&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        humidity &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; models&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;FloatField&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(default&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;  # form 0-100%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        rain &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; models&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;CharField&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(max_length&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, choices&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;            (&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;NR&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;No Rain&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;            (&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;LR&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Less/Few Rain&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;            (&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;MR&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Moderate Rain&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;            (&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;HR&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;Heavy Rain&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;        ))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        created_date &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; models&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;DateTimeField&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(auto_now&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;        def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; __str__&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{0}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;_&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;{1}&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(self.location, self.temperature)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Lets add some data in the models
&lt;img src=&quot;../images/my_post_images/add_weather_data.png&quot; alt=&quot;Adding data&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
List of images added
&lt;img src=&quot;../images/my_post_images/listdetail.png&quot; alt=&quot;Adding data&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;function-based-viewfbv&quot;&gt;Function Based View(FBV)&lt;a name=&quot;fbv&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In the begining of django development there was only function based view, later developers started noticing some feature were redundent and tried to extend view using various generic view. However, it was consistently hard to extend function based view. Therefore, later they introduced class based views. This example has 2 function based views 2 for listing data and another for displaying individual item.&lt;/p&gt;
&lt;h4 id=&quot;fbv-list-view&quot;&gt;FBV List View&lt;a name=&quot;fbv-list-view&quot;&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;We can list item in function based view as shown below.
Since this is a list view it is always good practice to paginate data and present them in small chunks with links to move to new data.&lt;/p&gt;
&lt;p&gt;Here is our views.py with function FBV_list_veiw&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; FBV_list_view&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    # you need to order it before pagination else paginator throws warning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    data &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; WeatherData&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;objects&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;all&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;order_by&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;-created_date&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    page &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; request&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;GET&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;page&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    paginator &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; Paginator&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(data, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        weather_data &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; paginator&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;page&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(page)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    except&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; PageNotAnInteger&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        weather_data &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; paginator&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;page&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    except&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; EmptyPage&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        weather_data &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; paginator&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;page&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(paginator.num_pages)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(request, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;cbv_vs_fbv_demo/list.html&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;weather_data&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;: weather_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;    })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This view can be rendered like this in urls.py&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; django&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;urls &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; path&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; include&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;views &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; FBV_list_view&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;urlpatterns &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    path&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, FBV_list_view, name&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;fbv_list_view&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The templates looks like this in list.html&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Django template&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;&amp;#x3C;table&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;  &amp;#x3C;thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    &amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      &amp;#x3C;th&gt;Location&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      &amp;#x3C;th&gt;Temperature&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      &amp;#x3C;th&gt;Wind Speed&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      &amp;#x3C;th&gt;Humidity&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      &amp;#x3C;th&gt;Rain&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    &amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;  &amp;#x3C;/thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;  &amp;#x3C;tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; data &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; weather_data %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      &amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        &amp;#x3C;td&gt;{{ data.location }}&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        &amp;#x3C;td&gt;{{ data.temperature }}&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        &amp;#x3C;td&gt;{{ data.wind_speed }}&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        &amp;#x3C;td&gt;{{ data.humidity }}&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        &amp;#x3C;td&gt;{{ data.rain }}&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      &amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;endfor&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;  &amp;#x3C;/tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;&amp;#x3C;/table&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;{% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; weather_data.has_other_pages %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;  &amp;#x3C;ul class=&quot;pagination&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; weather_data.has_previous %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      &amp;#x3C;li&gt;&amp;#x3C;a href=&quot;?page={{ weather_data.previous_page_number }}&quot;&gt;&amp;#x26;laquo;&amp;#x3C;/a&gt;&amp;#x3C;/li&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      &amp;#x3C;li class=&quot;disabled&quot;&gt;&amp;#x3C;span&gt;&amp;#x26;laquo;&amp;#x3C;/span&gt;&amp;#x3C;/li&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;endif&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; weather_data.paginator.page_range %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; weather_data.number &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; i %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        &amp;#x3C;li class=&quot;active&quot;&gt;&amp;#x3C;span&gt;{{ i }} &amp;#x3C;span class=&quot;sr-only&quot;&gt;(current)&amp;#x3C;/span&gt;&amp;#x3C;/span&gt;&amp;#x3C;/li&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;        &amp;#x3C;li&gt;&amp;#x3C;a href=&quot;?page={{ i }}&quot;&gt;{{ i }}&amp;#x3C;/a&gt;&amp;#x3C;/li&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;endif&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;endfor&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; weather_data.has_next %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      &amp;#x3C;li&gt;&amp;#x3C;a href=&quot;?page={{ weather_data.next_page_number }}&quot;&gt;&amp;#x26;raquo;&amp;#x3C;/a&gt;&amp;#x3C;/li&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;      &amp;#x3C;li class=&quot;disabled&quot;&gt;&amp;#x3C;span&gt;&amp;#x26;raquo;&amp;#x3C;/span&gt;&amp;#x3C;/li&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    {% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;endif&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;  &amp;#x3C;/ul&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;{% &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;endif&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; %}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;fbv-detail-view&quot;&gt;FBV Detail View&lt;a name=&quot;fbv-detail-view&quot;&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;For detail view we just pull the data based on id or slug. Here in this tutorial we are going to use it using id.
Detail view function looks like this.&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; FBV_detail_view&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-parameter)&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    data &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; WeatherData&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;objects&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(id&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(request, &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;cbv_vs_fbv_demo/detail.html&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;        &#39;data&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;: data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;    })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We will add path like this in urls.py&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;#... &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;urlpatterns &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    #...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;    path&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;detail/&amp;#x3C;int:id&gt;/&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, FBV_detail_view, name&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;FBV_detail_view&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;class-based-viewcbv&quot;&gt;Class Based View(CBV)&lt;a name=&quot;cbv&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;For class based view we will use generic classes and render the same thing. Class based view makes it much easier to write our code in less amount of time.&lt;/p&gt;
&lt;h4 id=&quot;cbv-list-view&quot;&gt;CBV List View&lt;a name=&quot;cbv-list-view&quot;&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Following is the code for doing the same thing as list view did in function based view.
In veiws.py we will make our view class.&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;#... others as it is &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; django&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;views&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;generic&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;list &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ListView&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; django&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;views&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;generic&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;detail &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; DetailView&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; CBV_list_view&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;ListView&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    Class based view for listing data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    model &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; WeatherData&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    paginate_by &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt; 5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    context_object_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;weather_data&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    template_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;cbv_vs_fbv_demo/list_cbv.html&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We can link this in url using following code snippet&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;#....others as it is&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;list/&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, CBV_list_view.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;as_view&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(), name&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;cbv_list_view&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The main point to notice here is .as_view() method call. In function based view we call functions directly but in class based view we call as_view() method. We can also say urls simply have methods call in them.&lt;/p&gt;
&lt;h4 id=&quot;cbv-detail-view&quot;&gt;CBV Detail View&lt;a name=&quot;cbv-detail-view&quot;&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Detail view has following code in it&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt; CBV_detail_view&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;DetailView&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    model &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; WeatherData&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    context_object_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;data&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;    template_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &quot;cbv_vs_fbv_demo/detail.html&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;urls looks like this&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-comment)&quot;&gt;#....others as it is&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&#39;cbv_detail/&amp;#x3C;int:pk&gt;/&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;, CBV_detail_view.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;as_view&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;(), name&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;&quot;CBV_detail_view&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;comparision-of-cbv-and-fbv&quot;&gt;Comparision of CBV and FBV &lt;a name=&quot;comparision&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In the begining of the django there was only function based views later they introduced the concept of class based view to simply some repetative task. Lets compare advantages and disadvantages in CBV and FBV&lt;/p&gt;
&lt;p&gt;Advantages of CBV:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The code becomes concise and saves time.&lt;/li&gt;
&lt;li&gt;We can use already built in generic views, this makes it easy to extend the class&lt;/li&gt;
&lt;li&gt;We use separate get and post method to handle various request.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Disadvantages of CBV:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It hides a lot of implementation detail which make it harder to read and maintain.&lt;/li&gt;
&lt;li&gt;It difficult for beginners to wrap head around in the first place. Once they understand the flow it becomes easier.&lt;/li&gt;
&lt;li&gt;For using decorators we need to import separte method called method_decorator(syntax @method_decorator(…))&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Advantages of FBV:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The code is more explicit and make it easy to read and understand.&lt;/li&gt;
&lt;li&gt;Easy to use decorators (like login_required and so on)&lt;/li&gt;
&lt;li&gt;Easy to understand for beginners&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Disadvantages of FBV:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It uses if else statement for various request like GET and POST&lt;/li&gt;
&lt;li&gt;It difficult to extend commonly used functionality for instance pagination.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;a name=&quot;conclusion&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;h3 id=&quot;when-should-we-use-which&quot;&gt;When should we use which.&lt;/h3&gt;
&lt;p&gt;In my opinion both FBV and CBV completes the job. I would recommend using CBV in most of the cases as it is simple to extend and add functionality. However, if we need to write code that needs explicit explanation(like implementing an complex algorithm) FBV might be right approach. Also task like serving pdf files, or other resources can take FBV.&lt;/p&gt;
&lt;p&gt;I hope you like this article please feel free to contact me if you have any question.&lt;/p&gt;
</content>
</entry>
<entry>
  <title type="html">Deploying django app on VPS using nginx,gunicorn, supervisor</title>
  <link rel="alternate" type="text/html" href="https://www.bhojkarki.com.np/deploying-django-using-nginx-gunicorn-supervisor/" />
  <id>https://bhojkarki.com.np/deploying-django-using-nginx-gunicorn-supervisor</id>
  <published>2019-12-25T12:00:00.000Z</published>
  <updated>2019-12-25T12:00:00.000Z</updated>
  <summary type="text">Lets assume that you have a django project and the folder structure looks like this:</summary>
  <content type="html">&lt;p&gt;We have used:
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;python version: python3
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;machine: linux
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;django version: django-2.x&lt;/p&gt;
&lt;h2 id=&quot;project-structure&quot;&gt;Project Structure&lt;/h2&gt;
&lt;p&gt;Lets assume that you have a django project and the folder structure looks like this:&lt;/p&gt;
&lt;figure class=&quot;first&quot;&gt;
	&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://www.bhojkarki.com.np/images/my_post_images/django_app_structure.png&quot; width=&quot;713&quot; height=&quot;313&quot;&gt;
	&lt;figcaption&gt;Figure: Django app folder structure&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;about-structure&quot;&gt;About structure&lt;/h2&gt;
&lt;p&gt;&lt;span class=&quot;custom_text_color_blue&quot;&gt;mysite/&lt;/span&gt; is our django actual project
&lt;br/&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;&lt;span class=&quot;custom_text_color_blue&quot;&gt;&lt;em&gt;config/&lt;/em&gt;&lt;/span&gt; folder has config.json file which contains all our configuration file.
&lt;br/&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;&lt;span class=&quot;custom_text_color_blue&quot;&gt;&lt;em&gt;mysite/settings/&lt;/em&gt;&lt;/span&gt; folder contains main setting of our application.
Setting is seprated in base.py, development.py and production.py.
If we want to run in development mode we need to pass the settings file.
base.py is common settings file and development.py is for development mode.
For running app in development we do: &lt;span class=&quot;custom_text_color_blue&quot;&gt;python3 manage.py runserver --settings=mysite.settings.development.&lt;/span&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;&lt;span class=&quot;custom_text_color_blue&quot;&gt;&lt;em&gt;Requiremnts/&lt;/em&gt;&lt;/span&gt; folder has our requirement files
base.txt-- all pacakges in our app
development.txt – packages only used in development(e.g django-debug-toolbar)
production.txt – package used in production environment but not in development.
&lt;br/&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;&lt;span class=&quot;custom_text_color_blue&quot;&gt;&lt;em&gt;mysite/&lt;/em&gt;&lt;/span&gt; contains main djago apps.
&lt;br/&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;&lt;span class=&quot;custom_text_color_blue&quot;&gt;&lt;em&gt;mysite_apps/&lt;/em&gt;&lt;/span&gt; contains all our apps(note this folder is a python package)&lt;/p&gt;
&lt;h2 id=&quot;requirements&quot;&gt;Requirements&lt;/h2&gt;
&lt;p&gt;nginx: Nginx is used as a server to serve static files in our project to the user.
gunicorn: This is an used as an application server to serve our application. In development mode we can do
&lt;strong&gt;python3 manage.py runserver&lt;/strong&gt; and it will run the app. If we want to run the app using gunicorn we need to configure gunicorn in our application. We will see the configuration later.
supervisor: This tool is used to run gunicorn. Setting supervisor will help our application to restart in case of any problem. Supervisor is configured to handle running of gunicorn.&lt;/p&gt;
&lt;h2 id=&quot;what-is-the-flow-of-application&quot;&gt;What is the flow of application:&lt;/h2&gt;
&lt;p&gt;user request —&amp;gt; nginx server—&amp;gt; gunicorn(served by supervisor)—&amp;gt;our django app&lt;/p&gt;
&lt;h2 id=&quot;steps&quot;&gt;Steps:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Install requirements&lt;/li&gt;
&lt;li&gt;Setup virtualenvironment for our application&lt;/li&gt;
&lt;li&gt;Clone the project from github or other version control system&lt;/li&gt;
&lt;li&gt;Install requirements of our application(i.e. packages used by our app)&lt;/li&gt;
&lt;li&gt;Setting up postgres database&lt;/li&gt;
&lt;li&gt;Run migration and test application by running it&lt;/li&gt;
&lt;li&gt;Configure gunicorn&lt;/li&gt;
&lt;li&gt;Configure nginx&lt;/li&gt;
&lt;li&gt;Configure supervisord (or simply supervisor)&lt;/li&gt;
&lt;li&gt;Test everything is running fine&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;install-requirements&quot;&gt;1. Install requirements:&lt;/h2&gt;
&lt;p&gt;Here we assume that we are using python3 for our application and we are deploying on linux machine.
We need to install python3 using pip, virtualenv.
Enough talk lets dive into it:
Log into the vps machine using the credentials given by your vps provide. Once you are in we go through following steps:
First lets update our machine and install python3 and virtualenv:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Ruby&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;sudo apt&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;get update&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;sudo apt&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;get upgrade&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;sudo apt&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;get install python3&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;pip&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;sudo pip3 install virtualenv&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;setup-virtualenvironment-for-our-application&quot;&gt;2. Setup virtualenvironment for our application:&lt;/h2&gt;
&lt;p&gt;Lets create a virutal environment and start the virtualenv&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;virtualenv &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;Projects&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;venv&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;source &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;Projects&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;venv&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;bin&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;activate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;clone-the-project-from-github-or-other-version-control-system&quot;&gt;3. Clone the project from github or other version control system&lt;/h2&gt;
&lt;p&gt;Now we clone our project from github:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;git clone http&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;github&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;com&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;[path to your project]&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;mysite&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;install-requirements-of-our-applicationie-packages-used-by-our-app&quot;&gt;4. Install requirements of our application(i.e. packages used by our app)&lt;/h2&gt;
&lt;p&gt;Once the app is downloaded and virtualenv is running lets install the requirements. All our project dependent packages are in base.txt file and we use production.txt file to install from base.txt and also other packages from production.txt. We go to folder where manage.py is and run following command:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;pip install &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;r requirements&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;production&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;setting-up-postgres-database&quot;&gt;5. Setting Up postgres database&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;first go to postgres as:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;sudo su &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; postgres&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Then create database and user and set password in user:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;postgres&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; DATABASE&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; db_name;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;postgres&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; USER db_user;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;postgres&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;ALTER&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; USER db_user &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;PASSWORD&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt; &#39;myPassword&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Grant permission:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;postgres&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;GRANT&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; ALL PRIVILEGES &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; DATABASE&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; db_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;TO&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; db_user;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;After granting permission log out from psql using ‘&#92;q’ symbolizing quite. Then change the postgres user to root user as:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;SQL&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;postgres@server:~$ su &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;run-migration-and-test-application-by-running-it&quot;&gt;6. Run migration and test application by running it&lt;/h2&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;cd mysite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;manage&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;py migrate --settings&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;mysite&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;settings&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;production&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;manage&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;py runserver --settings&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;mysite&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;settings&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;production&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After testing everything stop the server.&lt;/p&gt;
&lt;h2 id=&quot;configure-gunicorn&quot;&gt;7. Configure gunicorn&lt;/h2&gt;
&lt;p&gt;Lets install gunicorn:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;pip install gunicorn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After installing gunicorn lets run our application using gunicorn for testing&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;DJANGO_SETTINGS_MODULE&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;mysite&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;settings&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;prduction  gunicorn mysite&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;wsgi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note: This is similar to saying &lt;strong&gt;./manage.py runserver --settings=mysite.settings.production&lt;/strong&gt; in development.
&lt;br&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;We can also pass workers to gunicorn using workers parameter as:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;DJANGO_SETTINGS_MODULE&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;mysite&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;settings&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;prduction  gunicorn --workers &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; mysite&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;wsgi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Once we verify everything is working fine we move on to configuring nginx.&lt;/p&gt;
&lt;h2 id=&quot;configure-nginx&quot;&gt;8. Configure nginx&lt;/h2&gt;
&lt;p&gt;Lets install nginx:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;sudo apt&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;get install nginx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After installation lets configure nginx file in /etc/nginx/sites-available/
Lets create a file name mysite in /etc/nginx/sites-available/mysite  and add following configuation:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Ruby&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;server{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	listen &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	server_name &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;ipaddress(e&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;x)&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	location &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;static {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;		alias&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;www&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;Projects_static_root&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;		expires 30d&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	location &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;media {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;	alias&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;www&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;Projects_media_root&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	expires 30d&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	location &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;		include&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; proxy_params&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;		proxy_pass &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;http:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;127.0&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;8000&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Here in place  ipaddress(e.g.x.x.x.x) use the ipaddress provided by your host provider.&lt;/p&gt;
&lt;p&gt;Now, check if our configuration file was correctly written and start our nginx:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Python&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;sudo nginx &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;t&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;sudo service nginx restart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;configure-supervisord-or-simply-supervisor&quot;&gt;9. Configure supervisord (or simply supervisor)&lt;/h2&gt;
&lt;p&gt;Installation:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Shell&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; supervisor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now, let’s create mysite.conf in /etc/supervisor/conf.d/ folder:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Vim&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;sudo vim &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;/etc/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;supervisor&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string-expression)&quot;&gt;/conf.d/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;mysite.conf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;and configure our project:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Ruby&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;program:&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;mysite]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;root&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;Projects&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;venv&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;bin&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;gunicorn &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;workers &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt; --&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;bind &lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;127.0&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;8000&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt; mysite&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;wsgi:&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;application&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;environment&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;DJANGO_SETTINGS_MODULE&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;mysite&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;settings&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;production&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;directory&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;root&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;Projects&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;mysite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;autostart&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;autorestart&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;stderr_logfile&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;mysite&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;err&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;log&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;stdout_logfile&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;mysite&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-punctuation)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;log&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;group&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;www&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-keyword)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-constant)&quot;&gt;programs:&lt;/span&gt;&lt;span style=&quot;color:var(--code-foreground)&quot;&gt;mysite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now lets start our app uing supervisor&lt;/p&gt;
&lt;div class=&quot;codeblock&quot; data-lang=&quot;Shell&quot;&gt;&lt;pre class=&quot;shiki field-journal&quot; style=&quot;background-color:var(--code-background);color:var(--code-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;service&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; supervisor&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; stop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--code-token-function)&quot;&gt;service&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; supervisor&lt;/span&gt;&lt;span style=&quot;color:var(--code-token-string)&quot;&gt; restart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now our app should be running on the ipaddress configured by you check for further details.&lt;/p&gt;
</content>
</entry>
</feed>
