\documentclass[]{schulein}
\usepackage[utf8]{inputenc}
\usepackage{schulinf}

% Dieses Dokument ist in der Zusammenarbeit von Informatikreferendaren und
% ehemaligen Informatikreferendaren der Studienseminare (heute ZfsL) Arnsberg,
% Hamm und Solingen entstanden.
%
% Das Dokument steht unter der Lizenz: Creative Commons by-nc-sa Version 4.0
% http://creativecommons.org/licenses/by-nc-sa/4.0/deed.de
%
% Nach dieser Lizenz darf das Dokument beliebig kopiert und bearbeitet werden,
% sofern das Folgeprodukt wiederum unter gleichen Lizenzbedingungen vertrieben
% und auf die ursprünglichen Urheber verwiesen wird.
% Eine kommerzielle Nutzung ist ausdrücklich ausgeschlossen.
%
% Die Namensnennung durch einen Verweis und die Lizenzangabe der ursprünglichen
% Urheber auf den Materialien für Schülerinnen und Schüler ist erforderlich.
%
% Die Sammlung der Dokumente steht unter
% http://ddi.uni-wuppertal.de/material/materialsammlung/
% zur Verfügung.
%
% Das LaTeX-Paket zum Setzen der Dokumente der Sammlung steht
% unter  http://www.ctan.org/pkg/schule
% zur Verfügung.

\usepackage[pdfauthor={Referendare der Informatikfachseminare Arnsberg, Hamm und Solingen}]{hyperref}
\usepackage{tcolorbox}
\tcbuselibrary{listings}
\tcbset{listing engine=listings}
\tcbuselibrary{breakable}
\tcbuselibrary{skins}

% Quelle für marker:
%
% tcolorbox
% cat-version: 3.72
% cat-date:    2015-08-12 14:13:33 +0200
% tlmgr search -file tcolorbox.doc.s_main.sty
%        texmf-dist/doc/latex/tcolorbox/tcolorbox.doc.s_main.sty
\makeatother
\newtcolorbox{marker}[1][]{%
  enhanced,
  before skip=2mm,after skip=3mm,
  boxrule=0.4pt,left=5mm,right=2mm,top=1mm,bottom=1mm,
  colback=yellow!50,
  colframe=yellow!20!black,
  sharp corners,rounded corners=southeast,arc is angular,arc=3mm,
  underlay={%
    \path[fill=tcbcol@back!80!black] 
      ([yshift=3mm]interior.south east)--++(-0.4,-0.1)--++(0.1,-0.2);
    \path[draw=tcbcol@frame,shorten <=-0.05mm,shorten >=-0.05mm] 
      ([yshift=3mm]interior.south east)--++(-0.4,-0.1)--++(0.1,-0.2);
    \path[fill=yellow!50!black,draw=none] 
      (interior.south west) rectangle node[white]{\Huge\bfseries !} 
      ([xshift=4mm]interior.north west);
    },
  drop fuzzy shadow,#1}
\makeatletter


%\includexmp{lizenz}
\cclizenz{byncsaeu}
\footerQRLink{materialsammlung_qr_url.pdf}

\svnid{$Id: info_05_konstruktoren.tex 1595 2016-10-10 04:31:10Z humbert $}

\dokName{Konstruktoren in Python}
\jahrgang{EF}

\def\bodydir{./}

\def\pythoncode{\lstinline[language=Python]}

%\provideenvironment\marker{}

\begin{document}

\section*{Konstruktor -- die Methode \pythoncode{__init__}}

Als \textbf{Konstruktor}  wird die Methode einer Klasse bezeichnet, die automatisch beim Erzeugen (Instanziieren) eines Objekts der Klasse aktiviert wird. In Python ist der Methodenbezeichner dafür vorgegeben: 
\pythoncode{__init__}. \texttt{init} steht dabei für das Wort Initialisierung, da diese Methode bei der Objekterzeugung automatisch aktiviert wird. Wie jede andere Methode kann auch der Konstruktor 
\pythoncode{__init__} mit formalen Parametern versehen werden und mit Attributen und Attributwerten arbeiten. 

\subsection*{Allgemeiner Konstruktor}
Zur Wiederholung der Begrifflichkeiten folgt der beispielhafte Aufbau eines Konstruktors in Python: 

\begin{tcblisting}{colback=yellow!5,listing only, fonttitle=\bfseries,
listing options={language=Python,columns=fullflexible,numbers=left, numbersep=2mm,numberstyle=\tiny\color{green!50!black},keywordstyle=\color{green!50!black},basicstyle=\bfseries}}
def __init__(self, formalerParam1, formalerParam2, formalerParam3):
  self.attribut1= formalerParam1
  self.attribut2= formalerParam2
  self.attribut3= formalerParam3
  self.attribut4= "Ein beliebiger Text"
  self.attribut5= 361
\end{tcblisting}


\subsection*{Konstruktor der Klasse Spiel}
Im konkreten Beispiel unseres Sportturniers sieht der Konstruktor der Klasse \texttt{Spiel} wie folgt aus:  

\begin{tcblisting}{colback=yellow!5,listing only, fonttitle=\bfseries,
listing options={language=Python,columns=fullflexible,numbers=left,numbersep=2mm, numberstyle=\tiny\color{green!50!black},keywordstyle=\color{green!50!black},basicstyle=\bfseries}}
def __init__(self, start1, ende1, halle1, mannschaft1, mannschaft2):
  self.beginn= start1
  self.ende= ende1
  self.halle= halle1
  self.mannschaftA= mannschaft1
  self.mannschaftB= mannschaft2
  self.punkteA= -1
  self.punkteB= -1
\end{tcblisting}

Soll das Objekt \pythoncode{meinSpiel} aus der Klasse \pythoncode{Spiel}  erzeugt werden,  so muss man nachsehen, welche und wieviele Parameter benötigt werden:

\begin{marker}
 \pythoncode{meinSpiel= Spiel("9:30", "10:00", halleAltbau, dieKaengurus, crazyFrogs)} 
\end{marker}

Es wird deutlich, dass die Reihenfolge der aktuellen Parameterwerte mit der Reihenfolge der init-Methode übereinstimmen muss.
	
\end{document}

