summaryrefslogtreecommitdiff
path: root/lecture-notes/advanced-python/slides/oop.tex
diff options
context:
space:
mode:
Diffstat (limited to 'lecture-notes/advanced-python/slides/oop.tex')
-rw-r--r--lecture-notes/advanced-python/slides/oop.tex226
1 files changed, 0 insertions, 226 deletions
diff --git a/lecture-notes/advanced-python/slides/oop.tex b/lecture-notes/advanced-python/slides/oop.tex
deleted file mode 100644
index bdb983c..0000000
--- a/lecture-notes/advanced-python/slides/oop.tex
+++ /dev/null
@@ -1,226 +0,0 @@
-\section{Object Oriented Programming}
-
-\begin{frame}[fragile]
- \frametitle{Objectives}
- At the end of this section, you will be able to -
- \begin{itemize}
- \item Understand the differences between Object Oriented Programming
- and Procedural Programming
- \item Appreciate the need for Object Oriented Programming
- \item Read and understand Object Oriented Programs
- \item Write simple Object Oriented Programs
- \end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Example: Managing Talks}
- \begin{itemize}
- \item A list of talks at a conference
- \item We want to manage the details of the talks
- \end{itemize}
- \begin{lstlisting}
- talk = {'Speaker': 'Guido van Rossum',
- 'Title': 'The History of Python'
- 'Tags': 'python,history,C,advanced'}
-
- def get_first_name(talk):
- return talk['Speaker'].split()[0]
-
- def get_tags(talk):
- return talk['Tags'].split(',')
- \end{lstlisting}
- \begin{itemize}
- \item Not convenient to handle large number of talks
- \end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Objects and Methods}
- \begin{itemize}
- \item Objects group data with the procedures/functions
- \item A single entity called \texttt{object}
- \item Everything in Python is an object
- \item Strings, Lists, Functions and even Modules
- \end{itemize}
- \begin{lstlisting}
- s = "Hello World"
- s.lower()
-
- l = [1, 2, 3, 4, 5]
- l.append(6)
- \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Objects \ldots}
- \begin{itemize}
- \item Objects provide a consistent interface
- \end{itemize}
- \begin{lstlisting}
- for element in (1, 2, 3):
- print element
- for key in {'one':1, 'two':2}:
- print key
- for char in "123":
- print char
- for line in open("myfile.txt"):
- print line
- for line in urllib2.urlopen('http://site.com'):
- print line
- \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Classes}
- \begin{itemize}
- \item A new string, comes along with methods
- \item A template or a blue-print, where these definitions lie
- \item This blue print for building objects is called a
- \texttt{class}
- \item \texttt{s} is an object of the \texttt{str} class
- \item An object is an ``instance'' of a class
- \end{itemize}
- \begin{lstlisting}
- s = "Hello World"
- type(s)
- \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Defining Classes}
- \begin{itemize}
- \item A class equivalent of the talk dictionary
- \item Combines data and methods into a single entity
- \end{itemize}
- \begin{lstlisting}
- class Talk:
- """A class for the Talks."""
-
- def __init__(self, speaker, title, tags):
- self.speaker = speaker
- self.title = title
- self.tags = tags
-
- def get_speaker_firstname(self):
- return self.speaker.split()[0]
-
- def get_tags(self):
- return self.tags.split(',')
- \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{\texttt{class} block}
- \begin{itemize}
- \item Defined just like a function block
- \item \texttt{class} is a keyword
- \item \texttt{Talk} is the name of the class
- \item Classes also come with doc-strings
- \item All the statements of within the class are inside the block
- \end{itemize}
- \begin{lstlisting}
- class Talk:
- """A class for the Talks."""
-
- def __init__(self, speaker, title, tags):
- self.speaker = speaker
- self.title = title
- self.tags = tags
- \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{\texttt{self}}
- \begin{itemize}
- \item Every method has an additional first argument, \texttt{self}
- \item \texttt{self} is a reference to the object itself, of which
- the method is a part of
- \item Variables of the class are referred to as \texttt{self.variablename}
- \end{itemize}
- \begin{lstlisting}
- def get_speaker_firstname(self):
- return self.speaker.split()[0]
-
- def get_tags(self):
- return self.tags.split(',')
- \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Instantiating a Class}
- \begin{itemize}
- \item Creating objects or instances of a class is simple
- \item We call the class name, with arguments as required by it's
- \texttt{\_\_init\_\_} function.
- \end{itemize}
- \begin{lstlisting}
- bdfl = Talk('Guido van Rossum',
- 'The History of Python',
- 'python,history,C,advanced')
- \end{lstlisting}
- \begin{itemize}
- \item We can now call the methods of the Class
- \end{itemize}
- \begin{lstlisting}
- bdfl.get_tags()
- bdfl.get_speaker_firstname()
- \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{\texttt{\_\_init\_\_} method}
- \begin{itemize}
- \item A special method
- \item Called every time an instance of the class is created
- \end{itemize}
- \begin{lstlisting}
- print bdfl.speaker
- print bdfl.tags
- print bdfl.title
- \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile, allowframebreaks]
- \frametitle{Inheritance}
- \begin{itemize}
- \item Suppose, we wish to write a \texttt{Tutorial} class
- \item It's almost same as \texttt{Talk} except for minor differences
- \item We can ``inherit'' from \texttt{Talk}
- \end{itemize}
- \begin{lstlisting}
- class Tutorial(Talk):
- """A class for the tutorials."""
-
- def __init__(self, speaker, title, tags, handson=True):
- Talk.__init__(self, speaker, title, tags)
- self.handson = handson
-
- def is_handson(self):
- return self.handson
- \end{lstlisting}
- \begin{itemize}
- \item Modified \texttt{\_\_init\_\_} method
- \item New \texttt{is\_handson} method
- \item It also has, \texttt{get\_tags} and
- \texttt{get\_speaker\_firstname}
- \end{itemize}
- \begin{lstlisting}
- numpy = Tutorial('Travis Oliphant',
- 'Numpy Basics',
- 'numpy,python,beginner')
- numpy.is_handson()
- numpy.get_speaker_firstname()
- \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Summary}
- In this section we have learnt,
- \begin{itemize}
- \item the fundamental difference in paradigm, between Object Oriented
- Programming and Procedural Programming
- \item to write our own classes
- \item to write new classes that inherit from existing classes
- \end{itemize}
-\end{frame}
-