-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy path11-OOP2.html
102 lines (91 loc) · 70.7 KB
/
11-OOP2.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<title>11-OOP2</title>
<script type="text/javascript" src="11-OOP2_files/MathJax.js" charset="utf-8"></script>
<script type="text/javascript">
// MathJax disabled, set as null to distingish from *missing* MathJax,
// where it will be undefined, and should prompt a dialog later.
window.mathjax_url = "mathjax/MathJax.js";
</script>
<link rel="stylesheet" href="11-OOP2_files/jquery-wijmo.css" type="text/css">
<link rel="stylesheet" href="11-OOP2_files/codemirror.css">
<link rel="stylesheet" href="11-OOP2_files/markdown.css">
<link rel="stylesheet" href="11-OOP2_files/rst.css">
<link rel="stylesheet" href="11-OOP2_files/ipython.css">
<link rel="stylesheet" href="11-OOP2_files/default.css">
<link rel="stylesheet" href="11-OOP2_files/prettify.css">
<link rel="stylesheet" href="11-OOP2_files/boilerplate.css" type="text/css">
<link rel="stylesheet" href="11-OOP2_files/layout.css" type="text/css">
<link rel="stylesheet" href="11-OOP2_files/base.css" type="text/css">
<link rel="stylesheet" href="11-OOP2_files/notebook.css" type="text/css">
<link rel="stylesheet" href="11-OOP2_files/renderedhtml.css" type="text/css">
<meta name="read_only" content="False">
<style type="text/css">#MathJax_Zoom {position: absolute; background-color: #F0F0F0; overflow: auto; display: block; z-index: 301; padding: .5em; border: 1px solid black; margin: 0; font-family: serif; font-size: 85%; font-weight: normal; font-style: normal; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; box-shadow: 5px 5px 15px #AAAAAA; -webkit-box-shadow: 5px 5px 15px #AAAAAA; -moz-box-shadow: 5px 5px 15px #AAAAAA; -khtml-box-shadow: 5px 5px 15px #AAAAAA; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
#MathJax_ZoomOverlay {position: absolute; left: 0; top: 0; z-index: 300; display: inline-block; width: 100%; height: 100%; border: 0; padding: 0; margin: 0; background-color: white; opacity: 0; filter: alpha(opacity=0)}
</style><style type="text/css">#MathJax_About {position: fixed; left: 50%; width: auto; text-align: center; border: 3px outset; padding: 1em 2em; background-color: #DDDDDD; cursor: default; font-family: message-box; font-size: 120%; font-style: normal; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; border-radius: 15px; -webkit-border-radius: 15px; -moz-border-radius: 15px; -khtml-border-radius: 15px; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
.MathJax_Menu {position: absolute; background-color: white; color: black; width: auto; padding: 5px 0px; border: 1px solid #CCCCCC; margin: 0; cursor: default; font: menu; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; -khtml-border-radius: 5px; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
.MathJax_MenuItem {padding: 1px 2em; background: transparent}
.MathJax_MenuTitle {background-color: #CCCCCC; margin: -5px 0 0 0; text-align: center; font-style: italic; font-size: 80%; color: #444444; padding: 2px 0; overflow: hidden}
.MathJax_MenuArrow {position: absolute; right: .5em; color: #666666}
.MathJax_MenuActive .MathJax_MenuArrow {color: white}
.MathJax_MenuCheck {position: absolute; left: .7em}
.MathJax_MenuRadioCheck {position: absolute; left: .7em}
.MathJax_MenuLabel {padding: 1px 2em 3px 1.33em; font-style: italic}
.MathJax_MenuRule {border-top: 1px solid #DDDDDD; margin: 4px 3px}
.MathJax_MenuDisabled {color: GrayText}
.MathJax_MenuActive {background-color: #606872; color: white}
</style><style type="text/css">#MathJax_Message {position: fixed; left: 1px; bottom: 2px; background-color: #E6E6E6; border: 1px solid #959595; margin: 0px; padding: 2px 8px; z-index: 102; color: black; font-size: 80%; width: auto; white-space: nowrap}
#MathJax_MSIE_Frame {position: absolute; top: 0; left: 0; width: 0px; z-index: 101; border: 0px; margin: 0px; padding: 0px}
.MathJax_Error {color: #CC0000; font-style: italic}
</style><style type="text/css">@media print { body { overflow: visible !important; } }.ui-widget-content { border: 0px; }</style><style type="text/css">#MathJax_Zoom {position: absolute; background-color: #F0F0F0; overflow: auto; display: block; z-index: 301; padding: .5em; border: 1px solid black; margin: 0; font-family: serif; font-size: 85%; font-weight: normal; font-style: normal; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; box-shadow: 5px 5px 15px #AAAAAA; -webkit-box-shadow: 5px 5px 15px #AAAAAA; -moz-box-shadow: 5px 5px 15px #AAAAAA; -khtml-box-shadow: 5px 5px 15px #AAAAAA; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
#MathJax_ZoomOverlay {position: absolute; left: 0; top: 0; z-index: 300; display: inline-block; width: 100%; height: 100%; border: 0; padding: 0; margin: 0; background-color: white; opacity: 0; filter: alpha(opacity=0)}
</style><style type="text/css">#MathJax_About {position: fixed; left: 50%; width: auto; text-align: center; border: 3px outset; padding: 1em 2em; background-color: #DDDDDD; cursor: default; font-family: message-box; font-size: 120%; font-style: normal; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; border-radius: 15px; -webkit-border-radius: 15px; -moz-border-radius: 15px; -khtml-border-radius: 15px; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
.MathJax_Menu {position: absolute; background-color: white; color: black; width: auto; padding: 5px 0px; border: 1px solid #CCCCCC; margin: 0; cursor: default; font: menu; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; -khtml-border-radius: 5px; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
.MathJax_MenuItem {padding: 1px 2em; background: transparent}
.MathJax_MenuTitle {background-color: #CCCCCC; margin: -5px 0 0 0; text-align: center; font-style: italic; font-size: 80%; color: #444444; padding: 2px 0; overflow: hidden}
.MathJax_MenuArrow {position: absolute; right: .5em; color: #666666}
.MathJax_MenuActive .MathJax_MenuArrow {color: white}
.MathJax_MenuCheck {position: absolute; left: .7em}
.MathJax_MenuRadioCheck {position: absolute; left: .7em}
.MathJax_MenuLabel {padding: 1px 2em 3px 1.33em; font-style: italic}
.MathJax_MenuRule {border-top: 1px solid #DDDDDD; margin: 4px 3px}
.MathJax_MenuDisabled {color: GrayText}
.MathJax_MenuActive {background-color: #606872; color: white}
</style><style type="text/css">#MathJax_Message {position: fixed; left: 1px; bottom: 2px; background-color: #E6E6E6; border: 1px solid #959595; margin: 0px; padding: 2px 8px; z-index: 102; color: black; font-size: 80%; width: auto; white-space: nowrap}
#MathJax_MSIE_Frame {position: absolute; top: 0; left: 0; width: 0px; z-index: 101; border: 0px; margin: 0px; padding: 0px}
.MathJax_Error {color: #CC0000; font-style: italic}
</style></head><body style="overflow: auto;"><div tabindex="2" class="cell text_cell border-box-sizing ui-widget-content ui-corner-all"><div style="display: none;" class="text_cell_input"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default"><div style="position: relative; height: 3px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre>x</pre></div><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative" draggable="true"><pre class="CodeMirror-cursor"> </pre><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render rendered_html"><h1>Object Oriented Programming (part 2)</h1>
<h2>Inheritance</h2></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [64]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 558px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span> print '%s the animal says %s' % (self._name, message)</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">class</span><span class="cm-null"> </span><span class="cm-variable">Animal</span><span class="cm-null">(</span><span class="cm-builtin">object</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__init__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">name</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-variable">self._name</span><span class="cm-null"> = </span><span class="cm-variable">name</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">say</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">message</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-string">'%s the animal says %s'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> (</span><span class="cm-variable">self._name</span><span class="cm-null">, </span><span class="cm-variable">message</span><span class="cm-null">)</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">get_number_of_legs</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">raise</span><span class="cm-null"> </span><span class="cm-variable">NotImplementedError</span><span class="cm-null">, </span><span class="cm-string">'get_number_of_legs'</span></pre><pre><span class="cm-null"> </span></pre><pre><span class="cm-keyword">class</span><span class="cm-null"> </span><span class="cm-variable">Cat</span><span class="cm-null">(</span><span class="cm-variable">Animal</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__init__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">name</span><span class="cm-null">=</span><span class="cm-string">'Felix'</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-variable">Animal.__init__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">name</span><span class="cm-null">)</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">say</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">message</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-string">'%s the cat meows %s'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> (</span><span class="cm-variable">self._name</span><span class="cm-null">, </span><span class="cm-variable">message</span><span class="cm-null">)</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">get_number_of_legs</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">return</span><span class="cm-null"> </span><span class="cm-number">4</span></pre><pre><span class="cm-null"> </span></pre><pre><span class="cm-keyword">class</span><span class="cm-null"> </span><span class="cm-variable">Dog</span><span class="cm-null">(</span><span class="cm-variable">Animal</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__init__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">name</span><span class="cm-null">=</span><span class="cm-string">'Fido'</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-builtin">super</span><span class="cm-null">(</span><span class="cm-variable">Dog</span><span class="cm-null">, </span><span class="cm-variable">self</span><span class="cm-null">)</span><span class="cm-variable">.__init__</span><span class="cm-null">(</span><span class="cm-variable">name</span><span class="cm-null">)</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">say</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">message</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-string">'%s the dog barks %s'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> (</span><span class="cm-variable">self._name</span><span class="cm-null">, </span><span class="cm-variable">message</span><span class="cm-null">)</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">get_number_of_legs</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">return</span><span class="cm-null"> </span><span class="cm-number">4</span></pre><pre><span class="cm-null"> </span></pre><pre><span class="cm-keyword">class</span><span class="cm-null"> </span><span class="cm-variable">Monkey</span><span class="cm-null">(</span><span class="cm-variable">Animal</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__init__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">name</span><span class="cm-null">=</span><span class="cm-string">'George'</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-variable">Animal.__init__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">name</span><span class="cm-null">)</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">say</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">message</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-string">'%s the monkey says %s'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> (</span><span class="cm-variable">self._name</span><span class="cm-null">, </span><span class="cm-variable">message</span><span class="cm-null">)</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">get_number_of_legs</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">return</span><span class="cm-null"> </span><span class="cm-number">2</span></pre></div></div></div></div></div></div></div></div></div><div style="display: none;" class="output vbox"></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [65]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 47px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>animal = Animal('Generic')</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-variable">animal</span><span class="cm-null"> = </span><span class="cm-variable">Animal</span><span class="cm-null">(</span><span class="cm-string">'Generic'</span><span class="cm-null">)</span></pre><pre><span class="cm-variable">animal.say</span><span class="cm-null">(</span><span class="cm-string">'hello'</span><span class="cm-null">)</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre>Generic the animal says hello</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [66]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 30px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>print animal.get_number_of_legs()</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">animal.get_number_of_legs</span><span class="cm-null">()</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text"><pre><span class="ansired">---------------------------------------------------------------------------</span>
<span class="ansired">NotImplementedError</span> Traceback (most recent call last)
<span class="ansigreen">/vagrant/<ipython-input-66-3623e2c96566></span> in <span class="ansicyan"><module></span><span class="ansiblue">()</span>
<span class="ansigreen">----> 1</span><span class="ansired"> </span><span class="ansigreen">print</span> animal<span class="ansiblue">.</span>get_number_of_legs<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue"></span>
<span class="ansigreen">/vagrant/<ipython-input-64-798984796887></span> in <span class="ansicyan">get_number_of_legs</span><span class="ansiblue">(self)</span>
<span class="ansigreen"> 5</span> <span class="ansigreen">print</span> <span class="ansiblue">'%s the animal says %s'</span> <span class="ansiblue">%</span> <span class="ansiblue">(</span>self<span class="ansiblue">.</span>_name<span class="ansiblue">,</span> message<span class="ansiblue">)</span><span class="ansiblue"></span>
<span class="ansigreen"> 6</span> <span class="ansigreen">def</span> get_number_of_legs<span class="ansiblue">(</span>self<span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
<span class="ansigreen">----> 7</span><span class="ansired"> </span><span class="ansigreen">raise</span> NotImplementedError<span class="ansiblue">,</span> <span class="ansiblue">'get_number_of_legs'</span><span class="ansiblue"></span>
<span class="ansigreen"> 8</span> <span class="ansiblue"></span>
<span class="ansigreen"> 9</span> <span class="ansigreen">class</span> Cat<span class="ansiblue">(</span>Animal<span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
<span class="ansired">NotImplementedError</span>: get_number_of_legs
</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [67]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 47px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>animal.say('hello')</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-variable">animal</span><span class="cm-null"> = </span><span class="cm-variable">Cat</span><span class="cm-null">()</span></pre><pre><span class="cm-variable">animal.say</span><span class="cm-null">(</span><span class="cm-string">'hello'</span><span class="cm-null">)</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre>Felix the cat meows hello</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [68]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 65px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>print animal.get_number_of_legs()</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-variable">animal</span><span class="cm-null"> = </span><span class="cm-variable">Dog</span><span class="cm-null">()</span></pre><pre><span class="cm-variable">animal.say</span><span class="cm-null">(</span><span class="cm-string">'hello'</span><span class="cm-null">)</span></pre><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">animal.get_number_of_legs</span><span class="cm-null">()</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre>Fido the dog barks hello
4</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [69]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 47px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>animal.say('I have %s legs' % animal.get_number_of_legs())</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-variable">animal</span><span class="cm-null"> = </span><span class="cm-variable">Monkey</span><span class="cm-null">()</span></pre><pre><span class="cm-variable">animal.say</span><span class="cm-null">(</span><span class="cm-string">'I have %s legs'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> </span><span class="cm-variable">animal.get_number_of_legs</span><span class="cm-null">())</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre>George the monkey says I have 2 legs</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [70]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 30px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>isinstance(animal, Monkey)</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-variable">isinstance</span><span class="cm-null">(</span><span class="cm-variable">animal</span><span class="cm-null">, </span><span class="cm-variable">Monkey</span><span class="cm-null">)</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt output_prompt">Out[70]:</div><div class="box_flex1 output_subarea output_text"><pre>True</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [71]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 30px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>isinstance(animal, Cat)</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-variable">isinstance</span><span class="cm-null">(</span><span class="cm-variable">animal</span><span class="cm-null">, </span><span class="cm-variable">Cat</span><span class="cm-null">)</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt output_prompt">Out[71]:</div><div class="box_flex1 output_subarea output_text"><pre>False</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [72]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 30px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>isinstance(animal, Animal)</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-variable">isinstance</span><span class="cm-null">(</span><span class="cm-variable">animal</span><span class="cm-null">, </span><span class="cm-variable">Animal</span><span class="cm-null">)</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt output_prompt">Out[72]:</div><div class="box_flex1 output_subarea output_text"><pre>True</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [73]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 30px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>issubclass(Cat, Animal)</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-variable">issubclass</span><span class="cm-null">(</span><span class="cm-variable">Cat</span><span class="cm-null">, </span><span class="cm-variable">Animal</span><span class="cm-null">)</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt output_prompt">Out[73]:</div><div class="box_flex1 output_subarea output_text"><pre>True</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [74]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 100px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>x = MonkeyDog('What is this thing?!')</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">class</span><span class="cm-null"> </span><span class="cm-variable">MonkeyDog</span><span class="cm-null">(</span><span class="cm-variable">Monkey</span><span class="cm-null">, </span><span class="cm-variable">Dog</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">pass</span></pre><pre> </pre><pre><span class="cm-variable">x</span><span class="cm-null"> = </span><span class="cm-variable">MonkeyDog</span><span class="cm-null">(</span><span class="cm-string">'What is this thing?!'</span><span class="cm-null">)</span></pre><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">x.say</span><span class="cm-null">(</span><span class="cm-string">'hello?'</span><span class="cm-null">)</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre>What is this thing?! the monkey says hello?
None</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [75]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 30px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>print MonkeyDog.mro()</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">MonkeyDog.mro</span><span class="cm-null">()</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre>[<class '__main__.MonkeyDog'>, <class '__main__.Monkey'>, <class '__main__.Dog'>, <class '__main__.Animal'>, <type 'object'>]</pre></div></div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default"><div style="position: relative; height: 1px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre>x</pre></div><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative" draggable="true"><pre class="CodeMirror-cursor"> </pre><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render rendered_html"><h2>Magic methods</h2></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [76]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 30px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>print animal</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">animal</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre><__main__.Monkey object at 0x2847590></pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [77]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 30px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>print str(animal)</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-builtin">str</span><span class="cm-null">(</span><span class="cm-variable">animal</span><span class="cm-null">)</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre><__main__.Monkey object at 0x2847590></pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [78]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 100px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span> return '<Animal %s>' % self._name</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">class</span><span class="cm-null"> </span><span class="cm-variable">Animal</span><span class="cm-null">(</span><span class="cm-builtin">object</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__init__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">name</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-variable">self._name</span><span class="cm-null"> = </span><span class="cm-variable">name</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__str__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">return</span><span class="cm-null"> </span><span class="cm-string">'<Animal %s>'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> </span><span class="cm-variable">self._name</span></pre></div></div></div></div></div></div></div></div></div><div style="display: none;" class="output vbox"></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [79]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 47px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>animal = Animal('generic')</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-variable">animal</span><span class="cm-null"> = </span><span class="cm-variable">Animal</span><span class="cm-null">(</span><span class="cm-string">'generic'</span><span class="cm-null">)</span></pre><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">animal</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre><Animal generic></pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [80]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 135px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span> return '<Animal %s>' % self._name</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">class</span><span class="cm-null"> </span><span class="cm-variable">Animal</span><span class="cm-null">(</span><span class="cm-builtin">object</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__init__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">name</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-variable">self._name</span><span class="cm-null"> = </span><span class="cm-variable">name</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__str__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">return</span><span class="cm-null"> </span><span class="cm-string">'<Animal %s>'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> </span><span class="cm-variable">self._name</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__repr__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">return</span><span class="cm-null"> </span><span class="cm-string">'Animal(%r)'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> </span><span class="cm-variable">self._name</span></pre></div></div></div></div></div></div></div></div></div><div style="display: none;" class="output vbox"></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [81]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 30px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>Animal('with repr')</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-variable">Animal</span><span class="cm-null">(</span><span class="cm-string">'with repr'</span><span class="cm-null">)</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt output_prompt">Out[81]:</div><div class="box_flex1 output_subarea output_text"><pre>Animal('with repr')</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [82]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 30px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>print Animal('with repr')</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">Animal</span><span class="cm-null">(</span><span class="cm-string">'with repr'</span><span class="cm-null">)</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre><Animal with repr></pre></div></div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default"><div style="position: relative; height: 1px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre>x</pre></div><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative" draggable="true"><pre class="CodeMirror-cursor"> </pre><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render rendered_html"><h1>Override attribute access</h1></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [83]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 188px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span> print 'Trying to get %s' % name</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">class</span><span class="cm-null"> </span><span class="cm-variable">MyClass</span><span class="cm-null">(</span><span class="cm-builtin">object</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__init__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-variable">self.a</span><span class="cm-null"> = </span><span class="cm-string">'avalue'</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__getattr__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">name</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-string">'Trying to get %s'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> </span><span class="cm-variable">name</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">return</span><span class="cm-null"> </span><span class="cm-variable">None</span></pre><pre><span class="cm-null"> </span></pre><pre><span class="cm-variable">x</span><span class="cm-null"> = </span><span class="cm-variable">MyClass</span><span class="cm-null">()</span></pre><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">x.a</span></pre><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">x.unknown_attribute</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre>avalue
Trying to get unknown_attribute
None</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [84]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 170px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span> print 'Set %s <= %s' % (name, value)</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">class</span><span class="cm-null"> </span><span class="cm-variable">MyClass</span><span class="cm-null">(</span><span class="cm-builtin">object</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-variable">a</span><span class="cm-null"> = </span><span class="cm-number">0</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__setattr__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">name</span><span class="cm-null">, </span><span class="cm-variable">value</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-string">'Set %s <= %s'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> (</span><span class="cm-variable">name</span><span class="cm-null">, </span><span class="cm-variable">value</span><span class="cm-null">)</span></pre><pre><span class="cm-null"> </span></pre><pre><span class="cm-variable">x</span><span class="cm-null"> = </span><span class="cm-variable">MyClass</span><span class="cm-null">()</span></pre><pre><span class="cm-variable">x.a</span><span class="cm-null"> = </span><span class="cm-string">'avalue'</span></pre><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-string">'x.a is still %s'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> </span><span class="cm-variable">x.a</span></pre><pre><span class="cm-null"> </span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre>Set a <= avalue
x.a is still 0</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [85]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 188px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span> print 'Trying to get %s' % name</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">class</span><span class="cm-null"> </span><span class="cm-variable">MyClass</span><span class="cm-null">(</span><span class="cm-builtin">object</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__init__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-variable">self.a</span><span class="cm-null"> = </span><span class="cm-string">'avalue'</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__getattribute__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">name</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-string">'Trying to get %s'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> </span><span class="cm-variable">name</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">return</span><span class="cm-null"> </span><span class="cm-variable">None</span></pre><pre><span class="cm-null"> </span></pre><pre><span class="cm-variable">x</span><span class="cm-null"> = </span><span class="cm-variable">MyClass</span><span class="cm-null">()</span></pre><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">x.a</span></pre><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">x.unkown_attribute</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre>Trying to get a
None
Trying to get unkown_attribute
None</pre></div></div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default"><div style="position: relative; height: 1px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre>x</pre></div><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative" draggable="true"><pre class="CodeMirror-cursor"> </pre><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render rendered_html"><h2>Override Container Methods</h2></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [86]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 417px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span> return '<DefaultDict %r>' % self._data</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">class</span><span class="cm-null"> </span><span class="cm-variable">DefaultDict</span><span class="cm-null">(</span><span class="cm-builtin">object</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__init__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">default</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-variable">self._data</span><span class="cm-null"> = {}</span></pre><pre><span class="cm-null"> </span><span class="cm-variable">self._default</span><span class="cm-null"> = </span><span class="cm-variable">default</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__getitem__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">key</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">try</span><span class="cm-null">:</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">return</span><span class="cm-null"> </span><span class="cm-variable">self._data</span><span class="cm-null">[</span><span class="cm-variable">key</span><span class="cm-null">]</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">except</span><span class="cm-null"> </span><span class="cm-variable">KeyError</span><span class="cm-null">:</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">return</span><span class="cm-null"> </span><span class="cm-variable">self._default</span><span class="cm-null">()</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__setitem__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">key</span><span class="cm-null">, </span><span class="cm-variable">value</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-variable">self._data</span><span class="cm-null">[</span><span class="cm-variable">key</span><span class="cm-null">] = </span><span class="cm-variable">value</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__delitem__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">key</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">del</span><span class="cm-null"> </span><span class="cm-variable">self._data</span><span class="cm-null">[</span><span class="cm-variable">key</span><span class="cm-null">]</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__contains__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">, </span><span class="cm-variable">key</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">return</span><span class="cm-null"> </span><span class="cm-variable">key</span><span class="cm-null"> </span><span class="cm-operator">in</span><span class="cm-null"> </span><span class="cm-variable">self._data</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">def</span><span class="cm-null"> </span><span class="cm-variable">__repr__</span><span class="cm-null">(</span><span class="cm-variable">self</span><span class="cm-null">):</span></pre><pre><span class="cm-null"> </span><span class="cm-keyword">return</span><span class="cm-null"> </span><span class="cm-string">'<DefaultDict %r>'</span><span class="cm-null"> </span><span class="cm-operator">%</span><span class="cm-null"> </span><span class="cm-variable">self._data</span></pre><pre><span class="cm-null"> </span></pre><pre><span class="cm-variable">mydict</span><span class="cm-null"> = </span><span class="cm-variable">DefaultDict</span><span class="cm-null">(</span><span class="cm-keyword">lambda</span><span class="cm-null">:</span><span class="cm-number">5</span><span class="cm-null">)</span></pre><pre><span class="cm-variable">mydict</span><span class="cm-null">[</span><span class="cm-number">1</span><span class="cm-null">] = </span><span class="cm-number">1</span></pre><pre><span class="cm-variable">mydict</span><span class="cm-null">[</span><span class="cm-number">2</span><span class="cm-null">] = </span><span class="cm-number">2</span></pre><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">mydict</span></pre><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-number">2</span><span class="cm-null"> </span><span class="cm-operator">in</span><span class="cm-null"> </span><span class="cm-variable">mydict</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre><DefaultDict {1: 1, 2: 2}>
True</pre></div></div></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In [87]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px; top: 0px; left: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython"><div style="position: relative; height: 47px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre><span>print mydict[5]</span></pre></div><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative;" draggable="true"><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor"> </pre><div style=""><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">mydict</span><span class="cm-null">[</span><span class="cm-number">5</span><span class="cm-null">]</span></pre><pre><span class="cm-keyword">print</span><span class="cm-null"> </span><span class="cm-variable">mydict</span></pre></div></div></div></div></div></div></div></div></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box_flex1 output_subarea output_text output_stream output_stdout"><pre>5
<DefaultDict {1: 1, 2: 2}></pre></div></div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 1px; height: 0px;"><textarea style="position: absolute; width: 2px;" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default"><div style="position: relative; height: 11px;"><div style="position: absolute; height: 0; width: 0; overflow: hidden;"><pre>x</pre></div><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div style="position: relative" draggable="true"><pre class="CodeMirror-cursor"> </pre><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render rendered_html"><h2>Other Magic Methods</h2>
<ul>
<li>Comparison override (<code>__lt__</code>, <code>__gt__</code>, <code>__le__</code>, <code>__ge__</code>, <code>__eq__</code>, <code>__ne__</code>)</li>
<li>Emulating numeric types (<code>__add__</code>, <code>__sub__</code>, etc.)</li>
<li>... more ... (full list at <a href="http://docs.python.org/reference/datamodel.html#special-method-names">http://docs.python.org/reference/datamodel.html#special-method-names</a>)</li>
</ul>
<h3>Exercises</h3>
<ul>
<li>Update your phone directory to support looking up a number using the <code>[]</code> operator</li>
<li>Create two phone directories, one which throws exceptions when looking up phone numbers, and
a subclass that always returns the same number for unknown phone numbers.</li>
</ul></div></div><div style="height: 30%;" class="end_space"></div></body></html>