{"id":42604,"date":"2021-07-22T08:41:29","date_gmt":"2021-07-22T06:41:29","guid":{"rendered":"https:\/\/kinsta.com\/?p=97958"},"modified":"2023-07-27T11:45:32","modified_gmt":"2023-07-27T10:45:32","slug":"objektorientierten-programmierung-python","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/","title":{"rendered":"Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python"},"content":{"rendered":"<p>Programmieren ist eine Kunst. Und wie in der Kunst ist die Auswahl der richtigen Pinsel und Farben wichtig, um die besten Werke zu schaffen. Die objektorientierte Programmierung mit Python ist eine solche F\u00e4higkeit.<\/p>\n<p>Die Wahl der <a href=\"https:\/\/kinsta.com\/de\/blog\/beste-programmiersprache-lernen-sollte\/\">richtigen Programmiersprache<\/a> ist ein entscheidender Teil eines jeden Projekts und es kann entweder zu einer fl\u00fcssigen und angenehmen Entwicklung oder zu einem kompletten Albtraum f\u00fchren. Daher w\u00e4re es am besten, wenn du die Sprache verwendest, die am besten zu deinem Anwendungsfall passt.<\/p>\n<p>Das ist der Hauptgrund, objektorientiertes Programmieren in Python zu lernen, welches auch eine der beliebtesten Programmiersprachen ist.<\/p>\n<p>Lasst uns lernen!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Ein Beispiel Python Programm<\/h2>\n<p>Bevor wir in die Materie eintauchen, wollen wir eine Frage stellen: Hast du jemals ein Python-Programm wie das untenstehende geschrieben?<\/p>\n<pre><code class=\"language-python\">secret_number = 20\n \nwhile True:\n   number = input('Guess the number: ')\n \n   try:\n       number = int(number)\n   except:\n       print('Sorry that is not a number')\n       continue\n \n   if number != secret_number:\n       if number &gt; secret_number:\n           print(number, 'is greater than the secret number')\n \n       elif number &lt; secret_number:\n           print(number, 'is less than the secret number')\n   else:\n       print('You guessed the number:', secret_number)\n       break\n<\/code><\/pre>\n<p>Dieser Code ist ein einfacher Zahlensch\u00e4tzer. Versuche ihn in eine Python Datei zu kopieren und f\u00fchre ihn in deinem System aus. Es erf\u00fcllt perfekt seinen Zweck.<\/p>\n<p>Aber hier kommt ein gro\u00dfes Problem: Was w\u00e4re, wenn wir dich bitten w\u00fcrden, ein <a href=\"https:\/\/kinsta.com\/de\/changelog\/\">neues Feature<\/a> zu implementieren? Es k\u00f6nnte etwas Einfaches sein &#8211; zum Beispiel:<\/p>\n<p>&#8222;Wenn die Eingabe ein Vielfaches der Geheimzahl ist, gib dem Benutzer einen Hinweis.&#8220;<\/p>\n<p>Das Programm w\u00fcrde schnell komplex und schwer werden, wenn du die Anzahl der Features und damit die Gesamtzahl der verschachtelten Conditionals erh\u00f6hst.<\/p>\n<p>Das ist genau das Problem, das die objektorientierte Programmierung zu l\u00f6sen versucht.<\/p>\n\n<h2>Voraussetzungen, um Python OOP zu lernen<\/h2>\n<p>Bevor du in die objektorientierte Programmierung einsteigst, empfehlen wir dir, die Grundlagen von Python zu beherrschen.<\/p>\n<p>Die Klassifizierung von Themen, die als &#8222;grundlegend&#8220; gelten, kann schwierig sein. Aus diesem Grund haben wir einen <a href=\"https:\/\/kinsta.com\/de\/cheat-sheets\/\">Spickzettel<\/a> mit den wichtigsten Konzepten erstellt, die du zum Erlernen der objektorientierten Programmierung in Python ben\u00f6tigst.<\/p>\n<ul>\n<li><strong>Variable<\/strong>: Symbolischer Name, der auf ein bestimmtes <strong>Objekt<\/strong> zeigt (wir werden im Laufe des Artikels sehen, was Objekte bedeuten).<\/li>\n<li><strong>Arithmetische Operatoren<\/strong>: Addition (+), Subtraktion (-), Multiplikation (*), Division (\/), ganzzahlige Division (\/\/), modulo (%).<\/li>\n<li><strong>Eingebaute Datentypen<\/strong>: Numerisch (Integer, Float, Komplex), Sequenzen (Strings, Listen, Tupel), Boolesch (True, False), Dictionaries und Sets.<\/li>\n<li><strong>Boolesche Ausdr\u00fccke<\/strong>: Ausdr\u00fccke, bei denen das Ergebnis <strong>True<\/strong> oder <strong>False<\/strong><\/li>\n<li><strong>Conditional<\/strong>: Wertet einen booleschen Ausdruck aus und f\u00fchrt abh\u00e4ngig vom Ergebnis einen Prozess aus. Wird durch <strong>if\/else<\/strong> Anweisungen gehandhabt.<\/li>\n<li><strong>Schleife<\/strong>: Wiederholte Ausf\u00fchrung von Codebl\u00f6cken. Es kann sich um <strong>for<\/strong> oder <strong>while<\/strong> Schleifen handeln.<\/li>\n<li><strong>Funktionen<\/strong>: Block von organisiertem und wiederverwendbarem Code. Du erstellst sie mit dem Keyword <strong>def<\/strong>.<\/li>\n<li><strong>Argumente<\/strong>: Objekte, die an eine Funktion \u00fcbergeben werden. Zum Beispiel: <code>sum([1, 2, 4])<\/code><\/li>\n<li><strong>F\u00fchre ein Python-Skript aus<\/strong>: \u00d6ffne ein Terminal oder eine <a href=\"https:\/\/kinsta.com\/de\/blog\/ssh-befehle\/\">Kommandozeile<\/a> und gib &#8222;python &lt;Name der Datei&gt;&#8220; ein.<\/li>\n<li><strong>\u00d6ffne eine Python-Shell<\/strong>: \u00d6ffne ein Terminal und tippe &#8222;<code>python<\/code>&#8220; oder &#8222;<code>python3<\/code>&#8220; ein, abh\u00e4ngig von deinem System.<\/li>\n<\/ul>\n<p>Jetzt, wo du diese Konzepte kristallklar hast, kannst du mit dem Verst\u00e4ndnis der objektorientierten Programmierung fortfahren.<\/p>\n<h2>Was ist objektorientiertes Programmieren in Python?<\/h2>\n<p>Objektorientierte Programmierung (OOP) ist ein Programmierparadigma, in dem wir \u00fcber komplexe Probleme als Objekte denken k\u00f6nnen.<\/p>\n<p>Ein Paradigma ist eine Theorie, die die Basis f\u00fcr das L\u00f6sen von Problemen liefert<\/p>\n<p>Wenn wir also \u00fcber OOP sprechen, beziehen wir uns auf eine Reihe von Konzepten und Mustern, die wir verwenden, um Probleme mit Objekten zu l\u00f6sen.<\/p>\n<p>Ein Objekt in Python ist eine einzelne Sammlung von Daten (Attribute) und Verhalten (Methoden). Du kannst dir Objekte als reale Dinge vorstellen, die dich umgeben. Betrachte zum Beispiel Taschenrechner:<\/p>\n<figure id=\"attachment_97985\" aria-describedby=\"caption-attachment-97985\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Kinsta-Objects-around-you.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-97985 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Kinsta-Objects-around-you.png\" alt=\"Ein Taschenrechner kann ein Objekt sein.\" width=\"1024\" height=\"512\"><\/a><figcaption id=\"caption-attachment-97985\" class=\"wp-caption-text\">Ein Taschenrechner kann ein Objekt sein.<\/figcaption><\/figure>\n<p>Wie du vielleicht bemerkst, sind die Daten (Attribute) immer Substantive, w\u00e4hrend die Verhaltensweisen (Methoden) immer Verben sind.<\/p>\n<p>Diese Aufteilung ist das zentrale Konzept der objektorientierten Programmierung. Du baust Objekte, die Daten speichern und bestimmte Arten von Funktionalit\u00e4t enthalten.<\/p>\n<h2>Warum verwenden wir objektorientierte Programmierung in Python?<\/h2>\n<p>OOP erlaubt es dir, sichere und zuverl\u00e4ssige Software zu erstellen. Viele <a href=\"https:\/\/kinsta.com\/de\/blog\/php-vs-python\/#library-support\">Python Frameworks und Bibliotheken<\/a> nutzen dieses Paradigma, um ihre Codebasis aufzubauen. Einige Beispiele sind Django, Kivy, Pandas, NumPy und TensorFlow.<\/p>\n<p>Schauen wir uns die Hauptvorteile der Verwendung von OOP in Python an.<\/p>\n<h3>Vorteile von Python OOP<\/h3>\n<p>Die folgenden Gr\u00fcnde werden dich dazu bringen, dich f\u00fcr die Verwendung von objektorientierter Programmierung in Python zu entscheiden.<\/p>\n<h4>Alle modernen Programmiersprachen verwenden OOP<\/h4>\n<p>Dieses Paradigma ist sprachunabh\u00e4ngig. Wenn du OOP in Python lernst, kannst du es in den folgenden Sprachen verwenden:<\/p>\n<ul>\n<li>Java<\/li>\n<li>PHP (lies unbedingt den <a href=\"https:\/\/kinsta.com\/de\/blog\/php-vs-python\/\">Vergleich zwischen PHP und Python<\/a>)<\/li>\n<li>Ruby<\/li>\n<li><a href=\"https:\/\/kinsta.com\/de\/blog\/javascript-bibliotheken\/\">Javascript<\/a><\/li>\n<li>C#<\/li>\n<li>Kotlin<\/li>\n<\/ul>\n<p>Alle diese Sprachen sind entweder nativ objektorientiert oder beinhalten Optionen f\u00fcr objektorientierte Funktionalit\u00e4t. Wenn du eine dieser Sprachen nach Python lernen willst, wird es einfacher sein &#8211; du wirst viele \u00c4hnlichkeiten zwischen den Sprachen finden, die mit Objekten arbeiten.<\/p>\n<h4>OOP erlaubt es dir, schneller zu programmieren<\/h4>\n<p>Schneller zu kodieren bedeutet nicht, weniger Zeilen Code zu schreiben. Es bedeutet, dass du mehr Funktionen in k\u00fcrzerer Zeit implementieren kannst, ohne die Stabilit\u00e4t eines Projekts zu gef\u00e4hrden.<\/p>\n<p>Objektorientiertes Programmieren erlaubt es dir, Code wiederzuverwenden, indem du <a href=\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#1-abstraction\">Abstraktion<\/a> implementierst. Dieses Prinzip macht deinen Code pr\u00e4gnanter und lesbarer.<\/p>\n<p>Wie du vielleicht wei\u00dft, verbringen <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-entwickler-engagiert\/\">Programmierer<\/a> viel mehr Zeit damit, Code zu lesen als ihn zu schreiben. Es ist der Grund, warum Lesbarkeit immer wichtiger ist, als Features so schnell wie m\u00f6glich herauszubekommen.<\/p>\n<figure id=\"attachment_97986\" aria-describedby=\"caption-attachment-97986\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Kinsta-Not-legible-code.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-97986 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Kinsta-Not-legible-code.png\" alt=\"Produktivit\u00e4t sinkt mit nicht lesbarem Code\" width=\"1024\" height=\"512\"><\/a><figcaption id=\"caption-attachment-97986\" class=\"wp-caption-text\">Produktivit\u00e4t sinkt mit nicht lesbarem Code<\/figcaption><\/figure>\n<p>Du wirst sp\u00e4ter mehr \u00fcber das Abstraktionsprinzip erfahren.<\/p>\n<h4>OOP hilft dir, Spaghetti Code zu vermeiden<\/h4>\n<p>Erinnerst du dich an das Zahlensch\u00e4tzer-Programm am Anfang dieses Artikels?<\/p>\n<p>Wenn du weiterhin Funktionen hinzuf\u00fcgst, wirst du in Zukunft viele verschachtelte <strong>if<\/strong>-Anweisungen haben. Dieses Gewirr von endlosen Codezeilen nennt man Spaghetti-Code, und du solltest es so weit wie m\u00f6glich vermeiden.<\/p>\n<p>OOP gibt uns die M\u00f6glichkeit, die gesamte Logik in Objekten zu <a href=\"https:\/\/kinsta.com\/de\/blog\/gzip-komprimierung-aktivieren\/\">komprimieren<\/a> und somit lange St\u00fccke von verschachtelten <strong>if&#8217;s<\/strong> zu vermeiden.<\/p>\n<h4>OOP verbessert deine Analyse von jeder Situation<\/h4>\n<p>Sobald du etwas Erfahrung mit OOP gesammelt hast, wirst du in der Lage sein, Probleme als kleine und spezifische Objekte zu betrachten.<\/p>\n<p>Dieses Verst\u00e4ndnis f\u00fchrt zu einer schnellen Projektinitialisierung.<\/p>\n<h3>Strukturierte Programmierung vs. Objekt-orientierte Programmierung<\/h3>\n<p>Die strukturierte Programmierung ist das von Anf\u00e4ngern am h\u00e4ufigsten verwendete Paradigma, weil es der einfachste Weg ist, ein kleines Programm zu bauen.<\/p>\n<p>Es geht darum, ein Python-Programm sequentiell ablaufen zu lassen. Das hei\u00dft, du gibst dem Computer eine Liste von Aufgaben und f\u00fchrst sie dann von oben nach unten aus.<\/p>\n<p>Schauen wir uns ein Beispiel f\u00fcr strukturiertes Programmieren mit einem Coffee Shop Programm an.<\/p>\n<pre><code class=\"language-python\">small = 2\nregular = 5\nbig = 6\n \nuser_budget = input('What is your budget? ')\n \ntry:\n   user_budget = int(user_budget)\nexcept:\n   print('Please enter a number')\n   exit()\n \nif user_budget &gt; 0:\n   if user_budget &gt;= big:\n       print('You can afford the big coffee')\n       if user_budget == big:\n           print('It\\'s complete')\n       else:\n           print('Your change is', user_budget - big)\n   elif user_budget == regular:\n       print('You can afford the regular coffee')\n       print('It\\'s complete')\n   elif user_budget &gt;= small:\n       print('You can buy the small coffee')\n       if user_budget == small:\n           print('It\\'s complete')\n       else:\n           print('Your change is', user_budget - small)\n<\/code><\/pre>\n<p>Der obige Code agiert wie ein Kaffeehausverk\u00e4ufer. Er fragt dich nach einem Budget und &#8222;verkauft&#8220; dir dann den gr\u00f6\u00dften Kaffee, den du kaufen kannst.<\/p>\n<p>Versuche, es im <a href=\"https:\/\/kinsta.com\/de\/blog\/wp-cli\/\">Terminal<\/a> auszuf\u00fchren. Er wird Schritt f\u00fcr Schritt ausgef\u00fchrt, abh\u00e4ngig von deinen Eingaben.<\/p>\n<p>Dieser Code funktioniert perfekt, aber wir haben drei Probleme:<\/p>\n<ol>\n<li>Es hat eine Menge an wiederholter Logik.<\/li>\n<li>Es verwendet viele verschachtelte <strong>if<\/strong>-Bedingungen.<\/li>\n<li>Es wird schwer zu lesen und zu \u00e4ndern sein.<\/li>\n<\/ol>\n<p>OOP wurde als L\u00f6sung f\u00fcr all diese Probleme erfunden.<\/p>\n<p>Schauen wir uns das obige Programm an, das mit OOP implementiert wurde. Mach dir keine Sorgen, wenn du es noch nicht verstehst. Es dient nur dazu, strukturierte Programmierung und objektorientierte Programmierung zu vergleichen.<\/p>\n<pre><code class=\"language-python\">class Coffee:\n        # Constructor\n        def __init__(self, name, price):\n                self.name = name\n                self.price = float(price)\n        def check_budget(self, budget):\n                # Check if the budget is valid\n                if not isinstance(budget, (int, float)):\n                        print('Enter float or int')\n                        exit()\n                if budget &lt; 0: \n                    print('Sorry you don\\'t have money') \n                    exit() \n        def get_change(self, budget):\n                return budget - self.price\n        \n        def sell(self, budget):\n                self.check_budget(budget)\n                if budget &gt;= self.price:\n                        print(f'You can buy the {self.name} coffee')\n                        if budget == self.price:\n                                print('It\\'s complete')\n                        else:\n                                print(f'Here is your change {self.get_change(budget)}$')\n\n                        exit('Thanks for your transaction')\n<\/code><\/pre>\n<p><strong>Hinweis<\/strong>: Alle folgenden Konzepte werden im weiteren Verlauf des Artikels erkl\u00e4rt.<\/p>\n<p>Der obige Code repr\u00e4sentiert eine <strong>Klasse<\/strong> namens &#8222;Coffee&#8220;. Es hat zwei Attribute &#8211; &#8222;name&#8220; und &#8222;price&#8220; &#8211; und beide werden in den Methoden verwendet. Die prim\u00e4re Methode ist &#8222;sell&#8220;, die die gesamte Logik verarbeitet, die ben\u00f6tigt wird, um den Verkaufsprozess abzuschlie\u00dfen.<\/p>\n<p>Wenn du versuchst, diese Klasse auszuf\u00fchren, wirst du keine Ausgabe erhalten. Das liegt vor allem daran, dass wir nur das &#8222;Template&#8220; f\u00fcr die Kaffees deklarieren, nicht die Kaffees selbst.<\/p>\n<p>Lass uns diese Klasse mit dem folgenden Code implementieren:<\/p>\n<pre><code class=\"language-python\">small = Coffee('Small', 2)\nregular = Coffee('Regular', 5)\nbig = Coffee('Big', 6)\n \ntry:\n   user_budget = float(input('What is your budget? '))\nexcept ValueError:\n   exit('Please enter a number')\n  \nfor coffee in [big, regular, small]:\n   coffee.sell(user_budget)\n<\/code><\/pre>\n<p>Hier erzeugen wir <strong>Instanzen<\/strong> oder Kaffee-Objekte der Klasse &#8222;Coffee&#8220; und rufen dann die &#8222;Sell&#8220;-Methode jedes Kaffees auf, bis der Benutzer sich eine Option leisten kann.<\/p>\n<p>Mit beiden Ans\u00e4tzen erhalten wir die gleiche Ausgabe, aber wir k\u00f6nnen die Funktionalit\u00e4t des Programms mit OOP viel besser erweitern.<\/p>\n<p>Unten ist eine Tabelle, die objektorientierte Programmierung und strukturierte Programmierung vergleicht:<\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>OOP<\/strong><\/td>\n<td><strong>Strukturierte Programmierung<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Leichter zu warten<\/td>\n<td>Schwer zu warten<\/td>\n<\/tr>\n<tr>\n<td>Don&#8217;t Repeat Yourself (DRY) Ansatz<\/td>\n<td>Wiederholter Code an vielen Stellen<\/td>\n<\/tr>\n<tr>\n<td>Kleine Codest\u00fccke, die an vielen Stellen wiederverwendet werden<\/td>\n<td>Eine gro\u00dfe Menge an Code an wenigen Stellen<\/td>\n<\/tr>\n<tr>\n<td>Objektansatz<\/td>\n<td>Block Code Ansatz<\/td>\n<\/tr>\n<tr>\n<td>Einfachere <a href=\"https:\/\/kinsta.com\/de\/blog\/debugging-wordpress\/\">Fehlersuche<\/a><\/td>\n<td>Schwerer zu beheben<\/td>\n<\/tr>\n<tr>\n<td>Gro\u00dfer Lernaufwand<\/td>\n<td>Einfachere Lernkurve<\/td>\n<\/tr>\n<tr>\n<td>Einsatz in <a href=\"https:\/\/kinsta.com\/de\/kunden\/\">gro\u00dfen Projekten<\/a><\/td>\n<td>Optimiert f\u00fcr einfache Programme<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Um den Paradigmenvergleich abzuschlie\u00dfen:<\/p>\n<ul>\n<li>Keines der beiden Paradigmen ist perfekt (OOP kann \u00fcberw\u00e4ltigend sein, wenn man es in einfachen Projekten einsetzt).<\/li>\n<li>Dies sind nur zwei M\u00f6glichkeiten, ein Problem zu l\u00f6sen; es gibt noch andere.<\/li>\n<li>OOP wird in gro\u00dfen Codebases verwendet, w\u00e4hrend strukturierte Programmierung haupts\u00e4chlich f\u00fcr einfache Projekte gedacht ist.<\/li>\n<\/ul>\n<p>Lass uns mit den eingebauten Objekten in Python weitermachen.<\/p>\n<h2>Alles ist ein Objekt in Python<\/h2>\n<p>Wir verraten dir ein Geheimnis: Du hast die ganze Zeit OOP benutzt, ohne es zu bemerken.<\/p>\n<p>Selbst wenn du andere Paradigmen in Python verwendest, benutzt du immer noch Objekte, um fast alles zu tun.<\/p>\n<p>Das liegt daran, dass in Python alles ein Objekt ist.<\/p>\n<p>Erinnere dich an die Definition von Objekten: Ein Objekt in Python ist eine einzelne Sammlung von Daten (Attributen) und Verhalten (Methoden).<\/p>\n<p>Das passt zu jedem Datentyp in Python.<\/p>\n<p>Ein String ist eine Sammlung von Daten (Zeichen) und Verhaltensweisen (<strong>upper(), lower()<\/strong>, etc..). Das Gleiche gilt f\u00fcr <strong>Integer, Floats, Booleans, Listen<\/strong> und Dictionaries.<\/p>\n<p>Bevor wir fortfahren, lass uns die Bedeutung von Attributen und Methoden besprechen.<\/p>\n<h3>Attribute und Methoden<\/h3>\n<p>Attribute sind interne <strong>Variablen<\/strong> innerhalb von Objekten, w\u00e4hrend Methoden <strong>Funktionen<\/strong> sind, die ein bestimmtes Verhalten erzeugen.<\/p>\n<p>Lass uns eine einfache \u00dcbung in der Python-Shell machen. Du kannst es \u00f6ffnen, indem du <code>python<\/code> oder <code>python3<\/code> in dein Terminal eingibst.<\/p>\n<figure id=\"attachment_97989\" aria-describedby=\"caption-attachment-97989\" style=\"width: 843px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Python-terminal.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-97989 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Python-terminal.png\" alt=\"Python-Shell\" width=\"843\" height=\"123\"><\/a><figcaption id=\"caption-attachment-97989\" class=\"wp-caption-text\">Python-Shell<\/figcaption><\/figure>\n<p>Nun wollen wir mit der Python-<a href=\"https:\/\/kinsta.com\/de\/blog\/ssh-vs-ssl\/\">Shell<\/a> arbeiten, um Methoden und Typen zu entdecken.<\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; kinsta = 'Kinsta, Premium Application, Database, and Managed WordPress hosting'\n&gt;&gt;&gt; kinsta.upper()\n'KINSTA, PREMIUM APPLICATION, DATABASE, AND MANAGED WORDPRESS HOSTING'\n<\/code><\/pre>\n<p>In der zweiten Zeile rufen wir eine String-Methode auf, <strong>upper()<\/strong>. Sie gibt den Inhalt des Strings in Gro\u00dfbuchstaben zur\u00fcck. Die urspr\u00fcngliche Variable wird dadurch aber nicht ver\u00e4ndert.<\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; kinsta\n'Kinsta, Premium Application, Database, and Managed WordPress hosting'\n<\/code><\/pre>\n<p>Lass uns auf wertvolle Funktionen bei der Arbeit mit Objekten eingehen.<\/p>\n<p>Die <strong>type()<\/strong>-Funktion erlaubt es dir, den Typ eines Objekts zu erhalten. Der &#8222;Typ&#8220; ist die Klasse, zu der das Objekt geh\u00f6rt.<\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; type(kinsta)\n# class 'str'\n<\/code><\/pre>\n<p>Die <strong>dir()<\/strong> Funktion gibt alle Attribute und Methoden eines Objekts zur\u00fcck. Lass uns es mit der <strong>kinsta<\/strong>-Variable ausprobieren.<\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; dir(ki<span id=\"urn:enhancement-8\" class=\"textannotation\">nsta)\n<\/span>['__add__', '__class__',  ........... 'upper', 'zfill']\n<\/code><\/pre>\n<p>Versuche nun, einige der versteckten Attribute dieses Objekts zu drucken.<\/p>\n<pre><code class=\"language-python\"> &gt;&gt;&gt; kinsta.__class__ # class \u2018str\u2019 e&gt;<\/code><\/pre>\n<p>Dies wird die Klasse ausgeben, zu der das Objekt <strong>kinsta<\/strong> geh\u00f6rt. Wir k\u00f6nnen also sagen, dass das einzige, was die <strong>Typ-<\/strong>funktion zur\u00fcckgibt, das <strong>__class__<\/strong> Attribut eines Objekts ist.<\/p>\n<p>Du kannst mit allen Datentypen experimentieren und alle ihre Attribute und Methoden direkt auf dem Terminal entdecken. Du kannst mehr \u00fcber die eingebauten Datentypen in der <a href=\"https:\/\/docs.python.org\/3\/library\/stdtypes.html\">offiziellen Dokumentation<\/a> erfahren.<\/p>\n<h2>Dein erstes Objekt in Python<\/h2>\n<p>Eine <strong>Klasse<\/strong> ist wie ein Template. Sie erlaubt es dir, eigene Objekte zu erstellen, die auf den von dir definierten Attributen und Methoden basieren.<\/p>\n<p>Du kannst es dir wie eine <strong>Ausstechform<\/strong> vorstellen, die du modifizierst, um die perfekten Kekse (Objekte, nicht <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-cookies-php-sessions\/\">Tracking-Cookies<\/a>) zu backen, mit definierten Eigenschaften: Form, Gr\u00f6\u00dfe, und mehr.<\/p>\n<p>Auf der anderen Seite haben wir <strong>Instanzen<\/strong>. Eine Instanz ist ein individuelles Objekt einer Klasse, das eine eindeutige Speicheradresse hat.<\/p>\n<figure id=\"attachment_97990\" aria-describedby=\"caption-attachment-97990\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Kinsta-Instances.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-97990 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Kinsta-Instances.png\" alt=\"Instanzen in Python\" width=\"1024\" height=\"512\"><\/a><figcaption id=\"caption-attachment-97990\" class=\"wp-caption-text\">Instanzen in Python<\/figcaption><\/figure>\n<p>Jetzt, wo du wei\u00dft, was Klassen und Instanzen sind, lass uns welche definieren!<\/p>\n<p>Um eine <strong>Klasse<\/strong> in Python zu definieren, benutzt du das Keyword class, gefolgt von ihrem Namen. In diesem Fall wirst du eine Klasse namens <strong>Cookie<\/strong> erstellen.<\/p>\n<p><strong>Hinweis<\/strong>: In Python verwenden wir die <a href=\"https:\/\/en.wikipedia.org\/wiki\/Camel_case#:~:text=Camel%20case%20(sometimes%20stylized%20as,word%20starting%20with%20either%20case.\">Konvention der Gro\u00df- und Kleinschreibung<\/a>, um Klassen zu benennen.<\/p>\n<pre><code class=\"language-python\">class Cookie:\n\tpass\n<\/code><\/pre>\n<p>\u00d6ffne deine Python-Shell und gib den obigen Code ein. Um eine Instanz einer Klasse zu erzeugen, gibst du einfach den Namen der Klasse und die Klammern dahinter ein. Es ist der gleiche Prozess wie der Aufruf einer Funktion.<\/p>\n<pre><code class=\"language-python\">cookie1 = Cookie()\n<\/code><\/pre>\n<p>Gl\u00fcckwunsch &#8211; du hast gerade dein erstes Objekt in Python erstellt! Du kannst seine id und seinen Typ mit dem folgenden Code \u00fcberpr\u00fcfen:<\/p>\n<pre><code class=\"language-python\">id(cookie1)\n140130610977040 # Unique identifier of the object\n\ntype(cookie1)\n&lt;class '__main__.Cookie'&gt;\n<\/code><\/pre>\n<p>Wie du sehen kannst, hat dieses Cookie einen eindeutigen Bezeichner im Speicher und sein Typ ist <strong>Cookie<\/strong>.<\/p>\n<p>Du kannst auch mit der Funktion <strong>isinstance() <\/strong>\u00fcberpr\u00fcfen, ob ein Objekt eine Instanz einer Klasse ist.<\/p>\n<pre><code class=\"language-python\">isinstance(cookie1, Cookie)\n# True\nisinstance(cookie1, int)\n# False\nisinstance('a string', Cookie)\n# False\n<\/code><\/pre>\n<h3>Konstruktor-Methode<\/h3>\n<p>Die <strong>__init__()<\/strong> Methode wird auch &#8222;Konstruktor&#8220; genannt. Sie wird von Python jedes Mal aufgerufen, wenn wir ein Objekt instanziieren.<\/p>\n<p>Der <a href=\"https:\/\/kinsta.com\/de\/blog\/php-8\/#constructor-property-promotion\">Konstruktor<\/a> erzeugt den Anfangszustand des Objekts mit dem minimalen Satz an Parametern, den es braucht, um zu existieren. Lass uns die Klasse <strong>Cookie<\/strong> modifizieren, so dass sie Parameter in ihrem Konstruktor akzeptiert.<\/p>\n<pre><code class=\"language-python\">class Cookie:\n\t# Constructor\n\tdef __init__(self, name, shape, chips='Chocolate'):\n\t\t# Instance attributes\n\t\tself.name = name\n\t\tself.shape = shape\n\t\tself.chips = chips\n<\/code><\/pre>\n<p>In der <strong>Cookie<\/strong> Klasse muss jeder Cookie einen Namen, eine Form und Chips haben. Letzteres haben wir als &#8222;Chocolate&#8220; definiert.<\/p>\n<p>Auf der anderen Seite bezieht sich <strong>self<\/strong> auf die Instanz der Klasse (das Objekt selbst).<\/p>\n<p>Versuche die Klasse in die Shell einzuf\u00fcgen und erstelle wie gewohnt eine Instanz des Cookies.<\/p>\n<pre><code class=\"language-python\">cookie2 = Cookie()\n# TypeError\n<\/code><\/pre>\n<p>Du wirst einen Fehler erhalten. Das liegt daran, dass du den minimalen Satz an Daten angeben musst, den das Objekt zum Leben braucht &#8211; in diesem Fall <strong>Name<\/strong> und <strong>Form<\/strong>, da wir bereits <strong>Chips<\/strong> auf &#8222;Chocolate&#8220; gesetzt haben.<\/p>\n<pre><code class=\"language-python\">cookie2 = Cookie('Awesome cookie', 'Star')\n<\/code><\/pre>\n<p>Um auf die Attribute einer Instanz zuzugreifen, musst du die Punktschreibweise verwenden.<\/p>\n<pre><code class=\"language-python\">cookie2.name\n# 'Awesome cookie'\ncookie2.shape\n# 'Star'\ncookie2.chips\n# 'Chocolate'\n<\/code><\/pre>\n<p>F\u00fcr den Moment hat die <strong>Cookie<\/strong> Klasse nichts allzu pikantes. Lass uns eine Beispielmethode <strong>bake()<\/strong> hinzuf\u00fcgen, um die Dinge interessanter zu machen.<\/p>\n<pre><code class=\"language-python\">class Cookie:\n\t# Constructor\n\tdef __init__(self, name, shape, chips='Chocolate'):\n\t\t# Instance attributes\n\t\tself.name = name\n\t\tself.shape = shape\n\t\tself.chips = chips\n\n\t# The object is passing itself as a parameter\n\tdef bake(self):\n\t\tprint(f'This {self.name}, is being baked with the shape {self.shape} and chips of {self.chips}')\n\t\tprint('Enjoy your cookie!')\n<\/code><\/pre>\n<p>Um eine Methode aufzurufen, verwende die Punktschreibweise und rufe es als Funktion auf.<\/p>\n<pre><code class=\"language-python\">cookie3 = Cookie('Baked cookie', 'Tree')\ncookie3.bake()\n# This Baked cookie, is being baked with the shape Tree and chips of Chocolate\nEnjoy your cookie!\n<\/code><\/pre>\n<h2>Die 4 S\u00e4ulen der OOP in Python<\/h2>\n<p>Objektorientierte Programmierung beinhaltet vier Haupts\u00e4ulen:<\/p>\n<h4>1. Abstraktion<\/h4>\n<p>Die Abstraktion verbirgt die interne Funktionalit\u00e4t einer Anwendung vor dem Benutzer. Der Benutzer kann entweder der Endkunde oder andere Entwickler sein.<\/p>\n<p>Wir k\u00f6nnen <strong>Abstraktion<\/strong> in unserem t\u00e4glichen Leben finden. Du wei\u00dft zum Beispiel, wie du dein Telefon benutzt, aber du wei\u00dft wahrscheinlich nicht genau, was in ihm passiert, wenn du eine App \u00f6ffnest.<\/p>\n<p>Ein weiteres Beispiel ist Python selbst. Du wei\u00dft, wie man es benutzt, um <a href=\"https:\/\/kinsta.com\/de\/blog\/cms-software\/\">funktionale Software<\/a> zu erstellen, und du kannst es auch tun, wenn du das Innenleben von Python nicht verstehst.<\/p>\n<p>Das Gleiche auf Code anzuwenden, erlaubt es dir, alle Objekte eines Problems zu sammeln und Standardfunktionalit\u00e4t in Klassen zu <strong>abstrahieren<\/strong>.<\/p>\n<h4>2. Vererbung<\/h4>\n<p>Vererbung erlaubt uns, mehrere <strong>Unterklassen<\/strong> von einer bereits definierten Klasse zu definieren.<\/p>\n<p>Sie dient in erster Linie dazu, dem <a href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\">DRY-Prinzip<\/a> zu folgen. Du wirst in der Lage sein, eine Menge Code wiederzuverwenden, indem du alle gemeinsam genutzten Komponenten in <strong>Oberklassen<\/strong> implementierst.<\/p>\n<p>Du kannst es dir wie das reale Konzept der <strong>genetischen Vererbung<\/strong> vorstellen. <a href=\"https:\/\/kinsta.com\/de\/blog\/child-theme-wordpress-erstellen\/\">Kinder<\/a> (Subclass) sind das Ergebnis der Vererbung zwischen zwei Eltern (Superclasses). Sie erben alle physischen Eigenschaften (Attribute) und einige gemeinsame Verhaltensweisen (Methoden).<\/p>\n<h4>3. Polymorphismus<\/h4>\n<p>Polymorphismus erlaubt es uns, Methoden und Attribute der <strong>Unterklassen<\/strong>, die zuvor in der <strong>Oberklasse<\/strong> definiert wurden, leicht zu ver\u00e4ndern.<\/p>\n<p>Die w\u00f6rtliche Bedeutung ist &#8222;<strong>viele Formen<\/strong>&#8222;. Das liegt daran, dass wir Methoden mit gleichem Namen, aber unterschiedlicher Funktionalit\u00e4t bauen.<\/p>\n<p>Um auf die vorherige Idee zur\u00fcckzukommen, sind Kinder auch ein perfektes Beispiel f\u00fcr Polymorphismus. Sie k\u00f6nnen ein definiertes Verhalten <strong>get_hungry()<\/strong> erben, aber auf eine etwas andere Art und Weise, zum Beispiel, dass sie alle 4 statt alle 6 Stunden hungrig werden.<\/p>\n<h4>4. Verkapselung<\/h4>\n<p>Verkapselung ist der Prozess, in dem wir die interne Integrit\u00e4t von Daten in einer Klasse sch\u00fctzen.<\/p>\n<p>Obwohl es in Python keine <strong>private<\/strong> Anweisung gibt, kannst du Kapselung anwenden, indem du <a href=\"https:\/\/en.wikipedia.org\/wiki\/Name_mangling#Python\">Mangling in Python<\/a> benutzt. Es gibt spezielle Methoden, die <strong>Getter<\/strong> und <strong>Setter<\/strong> genannt werden, die es uns erlauben, auf einzigartige Attribute und Methoden zuzugreifen.<\/p>\n<p>Stellen wir uns eine Klasse <strong>Human<\/strong> vor, die ein einzigartiges Attribut namens <strong>_height<\/strong> hat. Du kannst dieses Attribut nur innerhalb bestimmter Beschr\u00e4nkungen ver\u00e4ndern (es ist fast unm\u00f6glich, h\u00f6her als 3 Meter zu sein).<\/p>\n<h2>Einen Area Shape Resolver Calculator bauen<\/h2>\n<p>Eines der besten Dinge an Python ist, dass es uns erlaubt, eine gro\u00dfe Vielfalt an Software zu erstellen, von einem <a href=\"https:\/\/kinsta.com\/de\/docs\/devkinsta\/wp-cli\/\">CLI (Kommandozeileninterface)<\/a> Programm bis hin zu einer komplexen Web-App.<\/p>\n<p>Jetzt, wo du die Grundkonzepte von OOP gelernt hast, ist es an der Zeit, sie auf ein echtes Projekt anzuwenden.<\/p>\n<p><strong>Hinweis<\/strong>: Der gesamte folgende Code wird in diesem <a href=\"https:\/\/github.com\/DaniDiazTech\/Object-Oriented-Programming-in-Python\/blob\/main\/shape_calculator\/calculator.py\">GitHub Repository<\/a> verf\u00fcgbar sein. Ein <a href=\"https:\/\/kinsta.com\/de\/blog\/code-review-tools\/#3-github\">Code Revision Tool<\/a>, das uns hilft, Codeversionen mit Git zu verwalten.<\/p>\n<p>Deine Aufgabe ist es, einen Fl\u00e4chenrechner mit den folgenden Formen zu erstellen:<\/p>\n<ul>\n<li>Quadrat<\/li>\n<li>Rechteck<\/li>\n<li>Dreieck<\/li>\n<li>Kreis<\/li>\n<li>Sechseck<\/li>\n<\/ul>\n<h3>Shape Base Klasse<\/h3>\n<p>Erstelle zun\u00e4chst eine Datei <strong>calculator<\/strong>.<strong>py<\/strong> und \u00f6ffne sie. Da wir bereits die Objekte haben, mit denen wir arbeiten k\u00f6nnen, wird es einfach sein, sie in einer Klasse zu <strong>abstrahieren<\/strong>.<\/p>\n<p>Du kannst die gemeinsamen Eigenschaften analysieren und herausfinden, dass es sich bei allen um <strong>2D-Formen<\/strong> handelt. Daher ist die beste Option, eine Klasse <strong>Shape<\/strong> mit einer Methode <strong>get_area()<\/strong> zu erstellen, von der jede Form erben wird.<\/p>\n<p><strong>Hinweis<\/strong>: Alle Methoden sollten Verben sein. Das liegt daran, dass diese Methode <strong>get_area()<\/strong> hei\u00dft und nicht <strong>area()<\/strong>.<\/p>\n<pre><code class=\"language-python\">class Shape:\n\tdef __init__(self):\n\t\tpass\n\n\tdef get_area(self):\n\t\tpass\n<\/code><\/pre>\n<p>Der obige Code definiert die Klasse; allerdings ist darin noch nichts Interessantes enthalten.<\/p>\n<p>Lass uns die Standardfunktionalit\u00e4t der meisten dieser Shapes implementieren.<\/p>\n<pre><code class=\"language-python\">class Shape:\n\tdef __init__(self, side1, side2):\n\t\tself.side1 = side1\n\t\tself.side2 = side2\n\n\tdef get_area(self):\n\t\treturn self.side1 * self.side2\n\n\tdef __str__(self):\n\t\treturn f'The area of this {self.__class__.__name__} is: {self.get_area()}'\n<\/code><\/pre>\n<p>Lass uns aufschl\u00fcsseln, was wir mit diesem Code machen:<\/p>\n<ul>\n<li>In der <strong>__init__<\/strong> Methode fragen wir zwei Parameter ab, <strong>side1<\/strong> und <strong>side2<\/strong>. Diese bleiben als<strong> Instanzattribute<\/strong><\/li>\n<li>Die Funktion <strong>get_area()<\/strong> gibt die Fl\u00e4che der Form zur\u00fcck. In diesem Fall benutzt sie die Formel f\u00fcr die Fl\u00e4che eines Rechtecks, da es einfacher ist, sie mit anderen Formen zu implementieren.<\/li>\n<li>Die <strong>__str__()<\/strong> Methode ist eine &#8222;magische Methode&#8220;, genau wie <strong>__init__()<\/strong>. Es erlaubt dir, die Art und Weise, wie eine Instanz gedruckt wird, zu ver\u00e4ndern.<\/li>\n<li>Das <strong>__class__.__name__<\/strong> versteckte Attribut bezieht sich auf den Namen der Klasse. Wenn du mit einer <strong>Triangle<\/strong> Klasse arbeiten w\u00fcrdest, w\u00e4re dieses Attribut &#8222;Triangle&#8220;.<\/li>\n<\/ul>\n<h3>Rechteck Klasse<\/h3>\n<p>Da wir die Formel f\u00fcr den Fl\u00e4cheninhalt des Rechtecks implementiert haben, k\u00f6nnen wir eine einfache <strong>Rechteck<\/strong> Klasse erstellen, die nichts anderes tut, als von der <strong>Shape<\/strong> Klasse zu erben.<\/p>\n<p>Um <strong>Vererbung<\/strong> in Python anzuwenden, erstellst du wie gewohnt eine Klasse und umschlie\u00dft die Oberklasse, von der du erben m\u00f6chtest, mit Klammern.<\/p>\n<pre><code class=\"language-python\"># Folded base class\nclass Shape: ...\n \nclass Rectangle(Shape): # Superclass in Parenthesis\n\tpass\n<\/code><\/pre>\n<h3>Klasse Quadrat<\/h3>\n<p>Mit der Klasse <strong>Quadrat<\/strong> k\u00f6nnen wir einen ausgezeichneten Ansatz f\u00fcr <strong>Polymorphismus<\/strong> w\u00e4hlen.<\/p>\n<p>Erinnere dich daran, dass ein Quadrat einfach ein Rechteck ist, dessen vier Seiten alle gleich sind. Das bedeutet, dass wir die gleiche Formel benutzen k\u00f6nnen, um den Fl\u00e4cheninhalt zu erhalten.<\/p>\n<p>Wir k\u00f6nnen dies tun, indem wir die <strong>init<\/strong> Methode modifizieren, nur eine <strong>Seite<\/strong> als Parameter akzeptieren und diesen Seitenwert an den Konstruktor der <strong>Rechteck<\/strong> Klasse \u00fcbergeben.<\/p>\n<pre><code class=\"language-python\"># Folded classes\nclass Shape: ...\nclass Rectangle(Shape): ...\n \nclass Square(Rectangle):\n\tdef __init__(self, side):\n\t\tsuper().__init__(side, side)\n<\/code><\/pre>\n<p>Wie du sehen kannst, \u00fcbergibt die <a href=\"https:\/\/docs.python.org\/3\/library\/functions.html#super\">Superfunktion<\/a> den Parameter <strong>side<\/strong> zweimal an die <strong>Superklasse<\/strong>. Mit anderen Worten, sie \u00fcbergibt side sowohl als <strong>side1<\/strong> als auch als <strong>side2<\/strong> an den vorher definierten Konstruktor.<\/p>\n<h3>Dreiecks-Klasse<\/h3>\n<p>Ein Dreieck ist halb so gro\u00df wie das Rechteck, das es umgibt.<\/p>\n<figure id=\"attachment_97994\" aria-describedby=\"caption-attachment-97994\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a style=\"font-size: 1rem\" href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Triangle-formula.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-97994 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Triangle-formula.png\" alt=\"Beziehung zwischen Dreiecken und Rechtecken (Bildquelle: Varsity tutors).\" width=\"300\" height=\"200\"><\/a><figcaption id=\"caption-attachment-97994\" class=\"wp-caption-text\">Beziehung zwischen Dreiecken und Rechtecken (Bildquelle: Varsity tutors).<\/figcaption><\/figure>\n<p>Daher k\u00f6nnen wir von der <strong>Rectangle<\/strong> Klasse erben und die <strong>get_area<\/strong> Methode so anpassen, dass sie der Formel f\u00fcr die Dreiecksfl\u00e4che entspricht, die die H\u00e4lfte der Basis multipliziert mit der H\u00f6he ist.<\/p>\n<pre><code class=\"language-python\"># Folded classes\nclass Shape: ...\nclass Rectangle(Shape): ...\nclass Square(Rectangle): ...\n \nclass Triangle(Rectangle):\n\tdef __init__(self, base, height):\n\t\tsuper().__init__(base, height)\n \n\tdef get_area(self):\n\t\tarea = super().get_area()\n\t\treturn area \/ 2\n<\/code><\/pre>\n<p>Ein weiterer Anwendungsfall der <strong>super()<\/strong>-Funktion ist es, eine in der <strong>Superklasse<\/strong> definierte Methode aufzurufen und das Ergebnis als Variable zu speichern. Das ist es, was in der <strong>get_area()<\/strong> Methode passiert.<\/p>\n<h3>Kreis Klasse<\/h3>\n<p>Du kannst die Kreisfl\u00e4che mit der Formel <strong>\u03c0r\u00b2<\/strong> finden, wobei <strong>r<\/strong> der Radius des Kreises ist. Das bedeutet, dass wir die <strong>get_area()<\/strong> Methode modifizieren m\u00fcssen, um diese Formel zu implementieren.<\/p>\n<p><strong>Hinweis<\/strong>: Wir k\u00f6nnen den ungef\u00e4hren Wert von <strong>\u03c0<\/strong> aus dem Mathe-Modul importieren.<\/p>\n<pre><code class=\"language-python\"># Folded classes\nclass Shape: ...\nclass Rectangle(Shape): ...\nclass Square(Rectangle): ...\nclass Triangle(Rectangle): \u2026\n \n# At the start of the file\nfrom math import pi\n \nclass Circle(Shape):\n\tdef __init__(self, radius):\n\t\tself.radius = radius\n \n\tdef get_area(self):\n\t\treturn pi * (self.radius ** 2)\n<\/code><\/pre>\n<p>Der obige Code definiert die <strong>Circle<\/strong> Klasse, die einen anderen Konstruktor und <strong>get_area()<\/strong> Methoden verwendet.<\/p>\n<p>Obwohl <strong>Circle<\/strong> von der Klasse <strong>Shape<\/strong> erbt, kannst du jede einzelne Methode umdefinieren und es nach deinen W\u00fcnschen auslegen.<\/p>\n<h3>Regelm\u00e4\u00dfige Hexagon Klasse<\/h3>\n<p>Wir brauchen nur die L\u00e4nge einer Seite eines regul\u00e4ren Sechsecks, um seinen Fl\u00e4cheninhalt zu berechnen. Es ist \u00e4hnlich wie bei der Klasse <strong>Square<\/strong>, wo wir nur ein Argument an den Konstruktor \u00fcbergeben.<\/p>\n<figure id=\"attachment_97996\" aria-describedby=\"caption-attachment-97996\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Hexagon-formula.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-97996 size-medium\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Hexagon-formula-300x165.png\" alt=\"Sechseckige Fl\u00e4chenformel (Bildquelle: BYJU'S)\" width=\"300\" height=\"165\"><\/a><figcaption id=\"caption-attachment-97996\" class=\"wp-caption-text\">Sechseckige Fl\u00e4chenformel (Bildquelle: BYJU&#8217;S)<\/figcaption><\/figure>\n<p>Allerdings ist die Formel ganz anders und es impliziert die Verwendung einer Quadratwurzel. Deshalb verwendest du die Funktion <strong>sqrt()<\/strong> aus dem Mathe-Modul.<\/p>\n<pre><code class=\"language-python\"># Folded classes\nclass Shape: ...\nclass Rectangle(Shape): ...\nclass Square(Rectangle): ...\nclass Triangle(Rectangle): \u2026\nclass Circle(Shape): \u2026\n \n# Import square root\nfrom math import sqrt\n \nclass Hexagon(Rectangle):\n\t\n\tdef get_area(self):\n\t\treturn (3 * sqrt(3) * self.side1 ** 2) \/ 2\n<\/code><\/pre>\n<h3>Testen unserer Klassen<\/h3>\n<p>Wenn du eine Python-Datei mit einem Debugger ausf\u00fchrst, kannst du in einen interaktiven Modus wechseln. Der einfachste Weg, dies zu tun, ist die Verwendung der eingebauten <a href=\"https:\/\/docs.python.org\/3\/library\/functions.html#breakpoint\">Breakpoint<\/a>-Funktion.<\/p>\n<p><strong>Hinweis<\/strong>: Diese Funktion ist nur in Python 3.7 oder neuer verf\u00fcgbar.<\/p>\n<pre><code class=\"language-python\">from math import pi, sqrt\n# Folded classes\nclass Shape: ...\nclass Rectangle(Shape): ...\nclass Square(Rectangle): ...\nclass Triangle(Rectangle): \u2026\nclass Circle(Shape): \u2026\nclass Hexagon(Rectangle): \u2026\n \nbreakpoint()\n<\/code><\/pre>\n<p>Starte nun die Python-Datei und spiele mit den erstellten Klassen herum.<\/p>\n<pre><code class=\"language-python\">$ python calculator.py\n \n(Pdb) rec = Rectangle(1, 2)(Pdb) print(rec)\nThe area of this Rectangle is: 2\n(Pdb) sqr = Square(4)\n(Pdb) print(sqr)\nThe area of this Square is: 16\n(Pdb) tri = Triangle(2, 3)\n(Pdb) print(tri)\nThe area of this Triangle is: 3.0\n(Pdb) cir = Circle(4)\n(Pdb) print(cir)\nThe area of this Circle is: 50.26548245743669\n(Pdb) hex = Hexagon(3)\n(Pdb) print(hex)\nThe area of this Hexagon is: 23.382685902179844\n<\/code><\/pre>\n<h3>Herausforderung<\/h3>\n<p>Erstelle eine Klasse mit einem <strong>Methodenlauf<\/strong>, in dem der Benutzer eine Form ausw\u00e4hlen und deren Fl\u00e4che berechnen kann.<\/p>\n<p>Wenn du die Challenge abgeschlossen hast, kannst du einen Pull Request an das <a href=\"https:\/\/kinsta.com\/de\/blog\/git-vs-github\/\">GitHub Repo<\/a> senden oder deine L\u00f6sung im Kommentarbereich ver\u00f6ffentlichen.<\/p>\n\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=vmNem6wxfSQ\"><\/kinsta-video>\n<h2>Zusammenfassung<\/h2>\n<p>Objektorientierte Programmierung ist ein Paradigma, in dem wir Probleme l\u00f6sen, indem wir sie als <strong>Objekte<\/strong> betrachten. Wenn du Python OOP verstehst, kannst du es auch leicht in Sprachen wie <a href=\"https:\/\/kinsta.com\/de\/blog\/beste-programmiersprache-lernen-sollte\/#java\">Java<\/a>, <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-php\/\">PHP<\/a>, Javascript und <a href=\"https:\/\/kinsta.com\/de\/blog\/beste-programmiersprache-lernen-sollte\/#c-1\">C#<\/a> anwenden.<\/p>\n<p>In diesem Artikel hast du gelernt:<\/p>\n<ul>\n<li>Das Konzept der Objektorientierung in Python<\/li>\n<li>Vorteile der objektorientierten gegen\u00fcber der strukturierten Programmierung<\/li>\n<li>Grundlagen der objektorientierten Programmierung in Python<\/li>\n<li>Konzept der <strong>Klassen<\/strong> und wie man sie in Python verwendet<\/li>\n<li>Der <strong>Konstruktor<\/strong> einer Klasse in Python<\/li>\n<li><strong>Methoden<\/strong> und <strong>Attribute<\/strong> in Python<\/li>\n<li>Die vier S\u00e4ulen der OOP<\/li>\n<li>Die Implementierung von <strong>Abstraktion<\/strong>, <strong>Vererbung<\/strong> und <strong>Polymorphismus<\/strong> in einem Projekt<\/li>\n<\/ul>\n<p>Jetzt liegt es an dir!<\/p>\n<p>Wenn dir dieser Leitfaden gefallen hat, schau dir unseren Beitrag \u00fcber <a href=\"https:\/\/kinsta.com\/de\/blog\/python-tutorials\/\">Python-Tutorials<\/a> an.<\/p>\n<p><em>Lass uns deine L\u00f6sung f\u00fcr die Herausforderung unten in den Kommentaren wissen! Und vergiss nicht, dir unseren <a href=\"https:\/\/kinsta.com\/de\/blog\/php-vs-python\/\">Vergleich zwischen Python und PHP<\/a> anzuschauen.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Programmieren ist eine Kunst. Und wie in der Kunst ist die Auswahl der richtigen Pinsel und Farben wichtig, um die besten Werke zu schaffen. Die objektorientierte &#8230;<\/p>\n","protected":false},"author":181,"featured_media":42606,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[411,464],"topic":[974],"class_list":["post-42604","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-programming","tag-python","topic-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python<\/title>\n<meta name=\"description\" content=\"Lerne die Ins und Outs der objektorientierten Programmierung (OOP) in Python. Wir werden es vom Konzept bis zur Implementierung mit vielen Beispielen behandeln.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python\" \/>\n<meta property=\"og:description\" content=\"Lerne die Ins und Outs der objektorientierten Programmierung (OOP) in Python. Wir werden es vom Konzept bis zur Implementierung mit vielen Beispielen behandeln.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-22T06:41:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-27T10:45:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2021\/07\/python-object-oriented-programming.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Daniel Diaz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Lerne die Ins und Outs der objektorientierten Programmierung (OOP) in Python. Wir werden es vom Konzept bis zur Implementierung mit vielen Beispielen behandeln.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2021\/07\/python-object-oriented-programming.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@DaniDiazTech\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Diaz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"20\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/\"},\"author\":{\"name\":\"Daniel Diaz\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2\"},\"headline\":\"Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python\",\"datePublished\":\"2021-07-22T06:41:29+00:00\",\"dateModified\":\"2023-07-27T10:45:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/\"},\"wordCount\":3675,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2021\/07\/python-object-oriented-programming.jpeg\",\"keywords\":[\"programming\",\"Python\"],\"articleSection\":[\"Webentwicklung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/\",\"name\":\"Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2021\/07\/python-object-oriented-programming.jpeg\",\"datePublished\":\"2021-07-22T06:41:29+00:00\",\"dateModified\":\"2023-07-27T10:45:32+00:00\",\"description\":\"Lerne die Ins und Outs der objektorientierten Programmierung (OOP) in Python. Wir werden es vom Konzept bis zur Implementierung mit vielen Beispielen behandeln.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2021\/07\/python-object-oriented-programming.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2021\/07\/python-object-oriented-programming.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2\",\"name\":\"Daniel Diaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4541784060a3b28ffb67a5da67b1f7e7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4541784060a3b28ffb67a5da67b1f7e7?s=96&d=mm&r=g\",\"caption\":\"Daniel Diaz\"},\"description\":\"Daniel is a self-taught Python Developer, Technical Writer, and long-life learner. He enjoys creating software from scratch and explaining this process through stunning articles. Follow him on Twitter: @DaniDiazTech\",\"sameAs\":[\"https:\/\/developerroad.herokuapp.com\/\",\"https:\/\/www.linkedin.com\/in\/danidiaztech\",\"https:\/\/x.com\/DaniDiazTech\"],\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/danidiaztech\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python","description":"Lerne die Ins und Outs der objektorientierten Programmierung (OOP) in Python. Wir werden es vom Konzept bis zur Implementierung mit vielen Beispielen behandeln.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/","og_locale":"de_DE","og_type":"article","og_title":"Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python","og_description":"Lerne die Ins und Outs der objektorientierten Programmierung (OOP) in Python. Wir werden es vom Konzept bis zur Implementierung mit vielen Beispielen behandeln.","og_url":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2021-07-22T06:41:29+00:00","article_modified_time":"2023-07-27T10:45:32+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2021\/07\/python-object-oriented-programming.jpeg","type":"image\/jpeg"}],"author":"Daniel Diaz","twitter_card":"summary_large_image","twitter_description":"Lerne die Ins und Outs der objektorientierten Programmierung (OOP) in Python. Wir werden es vom Konzept bis zur Implementierung mit vielen Beispielen behandeln.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2021\/07\/python-object-oriented-programming.jpeg","twitter_creator":"@DaniDiazTech","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Daniel Diaz","Gesch\u00e4tzte Lesezeit":"20\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/"},"author":{"name":"Daniel Diaz","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2"},"headline":"Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python","datePublished":"2021-07-22T06:41:29+00:00","dateModified":"2023-07-27T10:45:32+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/"},"wordCount":3675,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2021\/07\/python-object-oriented-programming.jpeg","keywords":["programming","Python"],"articleSection":["Webentwicklung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/","url":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/","name":"Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2021\/07\/python-object-oriented-programming.jpeg","datePublished":"2021-07-22T06:41:29+00:00","dateModified":"2023-07-27T10:45:32+00:00","description":"Lerne die Ins und Outs der objektorientierten Programmierung (OOP) in Python. Wir werden es vom Konzept bis zur Implementierung mit vielen Beispielen behandeln.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2021\/07\/python-object-oriented-programming.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2021\/07\/python-object-oriented-programming.jpeg","width":1460,"height":730,"caption":"Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/kinsta.com\/de\/thema\/python\/"},{"@type":"ListItem","position":3,"name":"Ein Einsteigerhandbuch zur objektorientierten Programmierung (OOP) mit Python"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2","name":"Daniel Diaz","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4541784060a3b28ffb67a5da67b1f7e7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4541784060a3b28ffb67a5da67b1f7e7?s=96&d=mm&r=g","caption":"Daniel Diaz"},"description":"Daniel is a self-taught Python Developer, Technical Writer, and long-life learner. He enjoys creating software from scratch and explaining this process through stunning articles. Follow him on Twitter: @DaniDiazTech","sameAs":["https:\/\/developerroad.herokuapp.com\/","https:\/\/www.linkedin.com\/in\/danidiaztech","https:\/\/x.com\/DaniDiazTech"],"url":"https:\/\/kinsta.com\/de\/blog\/author\/danidiaztech\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/42604","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/181"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=42604"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/42604\/revisions"}],"predecessor-version":[{"id":62433,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/42604\/revisions\/62433"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/42604\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/42604\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/42604\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/42604\/translations\/pt"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/42604\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/42604\/translations\/nl"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/42604\/translations\/de"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/42604\/translations\/se"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/42604\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/42606"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=42604"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=42604"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=42604"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}