{"id":41069,"date":"2021-10-08T09:22:28","date_gmt":"2021-10-08T07:22:28","guid":{"rendered":"https:\/\/kinsta.com\/?p=97958"},"modified":"2023-06-07T10:19:13","modified_gmt":"2023-06-07T10:19:13","slug":"pythons-objektorienterade-programmering","status":"publish","type":"post","link":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/","title":{"rendered":"En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)"},"content":{"rendered":"<p>Programmering \u00e4r en konst. Och precis som inom konst \u00e4r det viktigt att v\u00e4lja r\u00e4tt penslar och f\u00e4rger f\u00f6r att producera de b\u00e4sta arbetena. Pythons objektorienterade programmering \u00e4r en s\u00e5dan f\u00e4rdighet.<\/p>\n<p>Att v\u00e4lja <a href=\"https:\/\/kinsta.com\/se\/blog\/basta-programmeringsspraket-att-lara-sig\/\">r\u00e4tt programmeringsspr\u00e5k<\/a> \u00e4r en viktig del av ett projekt, och det kan antingen leda till en smidig och trevlig utveckling eller en fullst\u00e4ndig mardr\u00f6m. D\u00e4rf\u00f6r skulle det vara b\u00e4st om du anv\u00e4nde det b\u00e4st anpassade spr\u00e5ket f\u00f6r just dina behov.<\/p>\n<p>Det \u00e4r den fr\u00e4msta anledningen till att l\u00e4ra sig objektorienterad programmering i Python, som ocks\u00e5 \u00e4r ett av de mest popul\u00e4ra programmeringsspr\u00e5ken.<\/p>\n<p>Vi tar och l\u00e4r oss tillsammans!<\/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>Ett exempel p\u00e5 ett Python-program<\/h2>\n<p>Innan vi g\u00e5r in p\u00e5 huvud\u00e4mnet, l\u00e5t oss st\u00e4lla en fr\u00e5ga: har du n\u00e5gonsin skrivit ett Python-program som det nedan?<\/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>Denna kod \u00e4r en enkel siffergissare. F\u00f6rs\u00f6k att kopiera in den i en Python-fil och k\u00f6r den i ditt system. Den g\u00f6r vad den ska.<\/p>\n<p>Men h\u00e4r kommer ett stort problem: t\u00e4nk om vi bad dig att l\u00e4gga till en <a href=\"https:\/\/kinsta.com\/se\/changelog\/\">ny funktion<\/a>? Det kan vara n\u00e5got enkelt \u2013 till exempel:<\/p>\n<p>&#8221;Om inmatningen \u00e4r en multipel av det hemliga numret, ge anv\u00e4ndaren en ledtr\u00e5d.\u201d<\/p>\n<p>Programmet skulle snabbt bli komplext och tungt om du \u00f6kar antalet funktioner och d\u00e4rmed det totala antalet inkapslade villkor.<\/p>\n<p>Det \u00e4r just det problemet som objektorienterad programmering f\u00f6rs\u00f6ker l\u00f6sa.<\/p>\n\n<h2>Krav f\u00f6r att l\u00e4ra sig Python OOP<\/h2>\n<p>Innan vi g\u00e5r in p\u00e5 objektorienterad programmering rekommenderar vi starkt att du har ett fast grepp om Pythons grunder.<\/p>\n<p>Att kalla n\u00e5got &#8221;grunder&#8221; kan vara sv\u00e5rt. D\u00e4rf\u00f6r har vi utformat en <a href=\"https:\/\/kinsta.com\/se\/cheat-sheets\/\">lathund<\/a> med alla de viktigaste begreppen som beh\u00f6vs f\u00f6r att l\u00e4ra sig objektorienterad programmering i Python.<\/p>\n<ul>\n<li><strong>Variabel: <\/strong>Symboliskt namn som pekar p\u00e5 ett visst objekt (vi ser vad <strong>objekt<\/strong> betyder l\u00e4ngre fram i artikeln).<\/li>\n<\/ul>\n<ul>\n<li><strong>Aritmetiska operat\u00f6rer: <\/strong>Addition ( + ), subtraktion ( &#8211; ), multiplikation ( * ), division ( \/ ), heltalsdivision ( \/ \/ ), modulo (%).<\/li>\n<\/ul>\n<ul>\n<li><strong>Inbyggda datatyper: <\/strong>Numerisk (heltal, flyttal, komplex), sekvenser (str\u00e4ngar, listor, tupler), Boolesk (sant, falskt), ordb\u00f6cker och upps\u00e4ttningar.<\/li>\n<\/ul>\n<ul>\n<li><strong>Booleska uttryck: <\/strong>Uttryck d\u00e4r resultatet \u00e4r <strong>Sant<\/strong> eller <strong>Falsk.<\/strong><\/li>\n<\/ul>\n<ul>\n<li><strong>Villkorad: <\/strong>Utv\u00e4rderar ett booleskt uttryck och utf\u00f6r en viss process beroende p\u00e5 resultatet. Hanteras av <strong>if\/else<\/strong>-uttryck.<\/li>\n<\/ul>\n<ul>\n<li><strong>Loop: <\/strong>Upprepad exekvering av kodblock. Det kan vara <strong>for <\/strong>eller <strong>while-<\/strong>loopar.<\/li>\n<\/ul>\n<ul>\n<li><strong>Funktion: <\/strong>Block av organiserad och \u00e5teranv\u00e4ndbar kod. Du skapar dem med nyckelordet <strong>def<\/strong>.<\/li>\n<\/ul>\n<ul>\n<li><strong>Argument: <\/strong>Objekt som skickas till en funktion. Till exempel: <code>sum([1, 2, 4])<\/code><\/li>\n<\/ul>\n<ul>\n<li><strong>K\u00f6r ett Python-skript<\/strong>: \u00d6ppna en terminal eller <a href=\"https:\/\/kinsta.com\/blog\/ssh-commands\/\">kommandorad<\/a> och skriv &#8221;python &lt;filnamn&gt;&#8221;.<\/li>\n<\/ul>\n<ul>\n<li><strong>\u00d6ppna ett Python-skall<\/strong>: \u00d6ppna en terminal och skriv <code>python<\/code> eller <code>python3<\/code> beroende p\u00e5 ditt system.<\/li>\n<\/ul>\n<p>Nu n\u00e4r dessa begrepp \u00e4r klart som spad kan du g\u00e5 vidare till att f\u00f6rst\u00e5 dig p\u00e5 objektorienterad programmering.<\/p>\n<h2>Vad \u00e4r objektorienterad programmering i Python?<\/h2>\n<p>Objektorienterad programmering (OOP) \u00e4r ett programmeringsparadigm d\u00e4r vi kan t\u00e4nka p\u00e5 komplexa problem som objekt.<\/p>\n<p>Ett paradigm \u00e4r en teori som levererar basen f\u00f6r att l\u00f6sa problem.<\/p>\n<p>S\u00e5 n\u00e4r vi pratar om OOP h\u00e4nvisar vi till en upps\u00e4ttning begrepp och m\u00f6nster som vi anv\u00e4nder f\u00f6r att l\u00f6sa problem med objekt.<\/p>\n<p>Ett objekt i Python \u00e4r en enskild samling data (attribut) och beteenden (metoder). Se objekt som faktiska saker omkring dig. T\u00e4nk till exempel en minir\u00e4knare:<\/p>\n<figure id=\"attachment_97985\" aria-describedby=\"caption-attachment-97985\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\" 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=\"En minir\u00e4knare kan vara ett objekt.\" width=\"1024\" height=\"512\"><\/a><figcaption id=\"caption-attachment-97985\" class=\"wp-caption-text\">En minir\u00e4knare kan vara ett objekt.<\/figcaption><\/figure>\n<p>Som du kanske m\u00e4rker \u00e4r data (attributen) alltid substantiv, medan beteenden (metod) alltid \u00e4r verb.<\/p>\n<p>Denna uppdelning \u00e4r det centrala konceptet inom objektorienterad programmering. Du bygger objekt som lagrar data och inneh\u00e5ller specifika typer av funktioner.<\/p>\n<h2>Varf\u00f6r anv\u00e4nder vi objektorienterad programmering i Python?<\/h2>\n<p>OOP l\u00e5ter dig skapa s\u00e4ker och p\u00e5litlig programvara. M\u00e5nga <a href=\"https:\/\/kinsta.com\/se\/blog\/php-vs-python\/#library-support\">Python-ramverk och bibliotek<\/a> anv\u00e4nder detta paradigm f\u00f6r att bygga sin kodbas. N\u00e5gra exempel \u00e4r Django, Kivy, pandas, NumPy och TensorFlow.<\/p>\n<p>L\u00e5t oss ta en titt p\u00e5 de viktigaste f\u00f6rdelarna med OOP i Python.<\/p>\n<h3>F\u00f6rdelar med Python OOP<\/h3>\n<p>F\u00f6ljande anledningar kommer s\u00e4kert f\u00e5 dig att v\u00e4lja objektorienterad programmering i Python.<\/p>\n<h4>Alla moderna programmeringsspr\u00e5k anv\u00e4nder OOP<\/h4>\n<p>Detta paradigm \u00e4r spr\u00e5koberoende. Om du l\u00e4r dig OOP i Python kommer du att kunna anv\u00e4nda det i f\u00f6ljande:<\/p>\n<ul>\n<li>Java<\/li>\n<li>PHP (se till att l\u00e4sa <a href=\"https:\/\/kinsta.com\/se\/blog\/php-vs-python\/\">j\u00e4mf\u00f6relsen mellan PHP och Python<\/a>)<\/li>\n<li>Ruby<\/li>\n<li><a href=\"https:\/\/kinsta.com\/se\/blog\/javascript-biblioteken\/\">JavaScript<\/a><\/li>\n<li>C#<\/li>\n<li>Kotlin<\/li>\n<\/ul>\n<p>Alla dessa spr\u00e5k \u00e4r antingen objektorienterade eller inkluderar alternativ f\u00f6r objektorienterad funktionalitet. Om du vill l\u00e4ra dig n\u00e5got av dem efter Python blir det l\u00e4ttare \u2013 du kommer se m\u00e5nga likheter mellan spr\u00e5k som arbetar med objekt.<\/p>\n<h4>OOP l\u00e5ter dig koda snabbare<\/h4>\n<p>Att koda snabbare betyder inte att du kommer skriva f\u00e4rre rader kod. Det inneb\u00e4r att du kan implementera fler funktioner p\u00e5 kortare tid utan att \u00e4ventyra stabiliteten i ett projekt.<\/p>\n<p>Objektorienterad programmering l\u00e5ter dig \u00e5teranv\u00e4nda kod genom att implementera <a href=\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#1-abstraction\">abstraktion<\/a>. Denna princip g\u00f6r din kod mer koncis och l\u00e4sbar.<\/p>\n<p>Som du kanske vet spenderar <a href=\"https:\/\/kinsta.com\/blog\/hire-wordpress-developer\/\">programmerare<\/a> mycket mer tid p\u00e5 att l\u00e4sa kod \u00e4n att skriva den. Det \u00e4r anledningen till att l\u00e4sbarhet alltid \u00e4r viktigare \u00e4n att f\u00e5 ut funktioner s\u00e5 snabbt som m\u00f6jligt.<\/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=\"Produktiviteten minskar med kod som inte \u00e4r lika l\u00e4sbar\" width=\"1024\" height=\"512\"><\/a><figcaption id=\"caption-attachment-97986\" class=\"wp-caption-text\">Produktiviteten minskar med kod som inte \u00e4r lika l\u00e4sbar<\/figcaption><\/figure>\n<p>Du f\u00e5r se mer om abstraktionsprincipen senare.<\/p>\n<h4>OOP hj\u00e4lper dig att undvika spaghettikod<\/h4>\n<p>Minns du siffergissningsprogrammet i b\u00f6rjan av den h\u00e4r artikeln?<\/p>\n<p>Om du forts\u00e4tter att l\u00e4gga till funktioner, f\u00e5r du m\u00e5nga inkapslade <strong>if<\/strong>-uttryck till slut. Denna h\u00e4rva av o\u00e4ndliga kodrader kallas spaghettikod, och du b\u00f6r undvika det s\u00e5 mycket som m\u00f6jligt.<\/p>\n<p>OOP ger oss m\u00f6jlighet att <a href=\"https:\/\/kinsta.com\/se\/blog\/aktiverar-gzip-komprimering\/\">komprimera<\/a> all logik i objekt, och d\u00e4rf\u00f6r undvika l\u00e5nga bitar av inkapslade <strong>if<\/strong>-satser.<\/p>\n<h4>OOP f\u00f6rb\u00e4ttrar din analys av situationen<\/h4>\n<p>N\u00e4r du f\u00e5tt lite erfarenhet med OOP kommer du att kunna t\u00e4nka p\u00e5 problem som sm\u00e5 och specifika objekt.<\/p>\n<p>Denna f\u00f6rst\u00e5else leder till en snabb projektinitiering.<\/p>\n<h3>Strukturerad programmering vs objektorienterad programmering<\/h3>\n<p>Strukturerad programmering \u00e4r det mest anv\u00e4nda paradigmet f\u00f6r nyb\u00f6rjare eftersom det \u00e4r det enklaste s\u00e4ttet att bygga ett litet program.<\/p>\n<p>Det inneb\u00e4r att k\u00f6ra ett Python-program sekventiellt. Det betyder att du ger datorn en lista \u00f6ver uppgifter och sedan k\u00f6r dem ovanifr\u00e5n och ned.<\/p>\n<p>L\u00e5t oss se ett exempel p\u00e5 strukturerad programmering med ett kaf\u00e9program.<\/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>Koden ovan fungerar som en kaf\u00e9leverant\u00f6r. Den kommer att be dig om en budget, sedan &#8221;s\u00e4lja&#8221; den st\u00f6rsta kaffekoppen du kan k\u00f6pa.<\/p>\n<p>F\u00f6rs\u00f6k att k\u00f6ra koden i <a href=\"https:\/\/kinsta.com\/se\/blog\/wp-cli\/\">terminalen<\/a>. Den kommer att exekveras steg f\u00f6r steg, beroende p\u00e5 din inmatning.<\/p>\n<p>Denna kod fungerar perfekt, men vi har tre problem:<\/p>\n<ol>\n<li>Den har mycket upprepad logik.<\/li>\n<li>Den anv\u00e4nder m\u00e5nga kapslade <strong>if<\/strong>-villkor.<\/li>\n<li>Den blir sv\u00e5r att l\u00e4sa och modifiera.<\/li>\n<\/ol>\n<p>OOP uppfanns som en l\u00f6sning p\u00e5 alla dessa problem.<\/p>\n<p>L\u00e5t oss se ovanst\u00e5ende program med OOP. Oroa dig inte om du inte f\u00f6rst\u00e5r det h\u00e4r \u00e4n. Det \u00e4r bara till f\u00f6r att j\u00e4mf\u00f6ra strukturerad programmering och objektorienterad programmering.<\/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>Observera: <\/strong>Alla f\u00f6ljande begrepp kommer att f\u00f6rklaras mer under artikelns g\u00e5ng.<\/p>\n<p>Ovanst\u00e5ende kod representerar en <strong>class<\/strong> som heter &#8221;Coffee&#8221;. Den har tv\u00e5 attribut &#8211; &#8221;name&#8221; och &#8221;price&#8221; &#8211; och de anv\u00e4nds b\u00e5da i metoderna. Den prim\u00e4ra metoden \u00e4r &#8221;sell&#8221;, som behandlar all logik som beh\u00f6vs f\u00f6r att slutf\u00f6ra f\u00f6rs\u00e4ljningsprocessen.<\/p>\n<p>Om du f\u00f6rs\u00f6ker k\u00f6ra den klassen f\u00e5r du ingen utmatning. Det sker fr\u00e4mst eftersom vi bara f\u00f6rklarad &#8221;template&#8221; [mallen] f\u00f6r kaffet, inte sj\u00e4lva kaffet.<\/p>\n<p>L\u00e5t oss implementera den klassen med f\u00f6ljande kod:<\/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>H\u00e4r g\u00f6r vi <strong>instances, <\/strong>eller kaffeobjekt, av klassen &#8221;coffee&#8221;, och anropar sedan &#8221;sell&#8221;-metoden f\u00f6r varje kaffe tills anv\u00e4ndaren har r\u00e5d med ett alternativ.<\/p>\n<p>Vi f\u00e5r samma utmatning med b\u00e5da tillv\u00e4gag\u00e5ngss\u00e4tten men vi kan ut\u00f6ka programfunktionen mycket b\u00e4ttre med OOP.<\/p>\n<p>Nedan f\u00f6ljer en tabell som j\u00e4mf\u00f6r objektorienterad programmering och strukturerad programmering:<\/p>\n<table>\n<tbody>\n<tr>\n<td><strong><span id=\"urn:enhancement-b41d7e43-4b22-45a3-9242-1db251cfa6cc\" class=\"textannotation\">OOP<\/span><\/strong><\/td>\n<td><strong>Strukturerad programmering<\/strong><\/td>\n<\/tr>\n<tr>\n<td>L\u00e4ttare att underh\u00e5lla<\/td>\n<td>Sv\u00e5r att underh\u00e5lla<\/td>\n<\/tr>\n<tr>\n<td>Upprepa inte dig sj\u00e4lv (DRY)-metoden.<\/td>\n<td>Upprepad kod p\u00e5 m\u00e5nga st\u00e4llen<\/td>\n<\/tr>\n<tr>\n<td>Sm\u00e5 bitar kod \u00e5teranv\u00e4nds p\u00e5 m\u00e5nga st\u00e4llen<\/td>\n<td>En stor m\u00e4ngd kod p\u00e5 n\u00e5gra st\u00e4llen<\/td>\n<\/tr>\n<tr>\n<td>Objektmetod<\/td>\n<td>Blockkodsmetod<\/td>\n<\/tr>\n<tr>\n<td>L\u00e4ttare att <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-debug\/\">fels\u00f6ka<\/a><\/td>\n<td>Sv\u00e5rare att fels\u00f6ka<\/td>\n<\/tr>\n<tr>\n<td>Stor inl\u00e4rningskurva<\/td>\n<td>Enklare inl\u00e4rningskurva<\/td>\n<\/tr>\n<tr>\n<td>Anv\u00e4nds i <a href=\"https:\/\/kinsta.com\/se\/kunder\/\">stora projekt<\/a><\/td>\n<td>Optimerad f\u00f6r enkla program<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u00a0<\/p>\n<p>F\u00f6r att avsluta j\u00e4mf\u00f6relsen:<\/p>\n<ul>\n<li>Inget paradigm \u00e4r perfekt (OOP kan vara \u00f6verv\u00e4ldigande att anv\u00e4nda i enkla projekt).<\/li>\n<li>Det h\u00e4r \u00e4r bara tv\u00e5 s\u00e4tt att l\u00f6sa ett problem; det finns andra.<\/li>\n<li>OOP anv\u00e4nds i stora kodbaser, medan strukturerad programmering fr\u00e4mst \u00e4r till f\u00f6r enkla projekt.<\/li>\n<\/ul>\n<p>L\u00e5t oss g\u00e5 vidare till inbyggda objekt i Python.<\/p>\n<h2>Allt \u00e4r ett objekt i Python<\/h2>\n<p>Vi ska ber\u00e4tta en hemlighet: du har anv\u00e4nt OOP hela tiden utan att m\u00e4rka det.<\/p>\n<p>Till och med n\u00e4r du anv\u00e4nder andra paradigmer i Python anv\u00e4nder du fortfarande objekt f\u00f6r att g\u00f6ra n\u00e4stan allt.<\/p>\n<p>Det beror p\u00e5 att i Python \u00e4r <em>allt<\/em> ett objekt.<\/p>\n<p>Kom ih\u00e5g definitionen av objekt: ett objekt i Python \u00e4r en enskild samling data (attribut) och beteenden (metoder).<\/p>\n<p>Det matchar alla datatyper i Python.<\/p>\n<p>En str\u00e4ng \u00e4r en samling data (tecken) och beteenden (<strong>upper()<\/strong>, <strong>lower()<\/strong>, osv..). Detsamma g\u00e4ller f\u00f6r <strong>heltal<\/strong>, <strong>flyttal<\/strong>, <strong>booleska uttryck<\/strong>, <strong>listor,<\/strong> och ordb\u00f6cker.<\/p>\n<p>Innan vi forts\u00e4tter, l\u00e5t oss granska betydelsen av attribut och metoder.<\/p>\n<h3>Attribut och metoder<\/h3>\n<p>Attribut \u00e4r interna <strong>variabler<\/strong> inuti objekt, medan metoder \u00e4r <strong>funktioner<\/strong> som skapar ett visst beteende.<\/p>\n<p>L\u00e5t oss g\u00f6ra en enkel \u00f6vning i Pythonskalet. Du kan \u00f6ppna det genom att skriva<code>python<\/code> eller <code>python3<\/code> i din terminal.<\/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=\"Pythonskal\" width=\"843\" height=\"123\"><\/a><figcaption id=\"caption-attachment-97989\" class=\"wp-caption-text\">Pythonskal<\/figcaption><\/figure>\n<p>L\u00e5t oss nu arbeta med <a href=\"https:\/\/kinsta.com\/blog\/ssh-vs-ssl\/\">Pythonskalet<\/a> f\u00f6r att uppt\u00e4cka metoder och typer.<\/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>I den andra raden anropar vi en str\u00e4ngmetod, <strong>upper()<\/strong>. Det returnerar inneh\u00e5llet i str\u00e4ngen helt i versaler. Det \u00e4ndrar dock inte den ursprungliga variabeln.<\/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><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">L\u00e5t oss g\u00e5 in mer p\u00e5 v\u00e4rdefulla funktioner n\u00e4r vi arbetar med objekt.<\/span><\/p>\n<p><strong>type()<\/strong>-funktionen ger dig ett objekts typ. &#8221;Typen&#8221; \u00e4r den klass som objektet tillh\u00f6r.<\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; type(kinsta)\n# class 'str'\n<\/code><\/pre>\n<p><strong>dir()<\/strong>-funktionen returnerar alla attribut och metoder f\u00f6r ett objekt. L\u00e5t oss testa det med <strong>kinsta<\/strong>-variabeln.<\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; dir(kinsta)\n['__add__', '__class__',  ........... 'upper', 'zfill']\n<\/code><\/pre>\n<p>F\u00f6rs\u00f6k nu mata ut n\u00e5gra av de dolda attributen f\u00f6r det h\u00e4r objektet.<\/p>\n<pre><code class=\"language-python\"> &gt;&gt;&gt; kinsta.__class__ # class \u2018str\u2019 e&gt;<\/code><\/pre>\n<p>Detta kommer att mata ut klassen som objektet <strong>kinsta<\/strong> tillh\u00f6r. S\u00e5 vi kan s\u00e4ga att det enda <strong>type<\/strong>-funktionen returnerar \u00e4r <strong>__class__ <\/strong>-attributet f\u00f6r ett objekt.<\/p>\n<p>Du kan experimentera med alla datatyper, uppt\u00e4cka alla deras attribut och metoder direkt p\u00e5 terminalen. Du kan l\u00e4sa mer om de inbyggda datatyperna i <a href=\"https:\/\/docs.python.org\/3\/library\/stdtypes.html\">den officiella dokumentationen<\/a>.<\/p>\n<h2>Ditt f\u00f6rsta objekt i Python<\/h2>\n<p>En <strong>klass<\/strong> \u00e4r som en mall<strong>.<\/strong> Den l\u00e5ter dig skapa egna objekt baserat p\u00e5 de attribut och metoder du definierar.<\/p>\n<p>Du kan se det som ett <strong>kakm\u00e5tt<\/strong> som du \u00e4ndrar f\u00f6r att baka de perfekta kakorna (objekt, inte <a href=\"https:\/\/kinsta.com\/blog\/wordpress-cookies-php-sessions\/\">sp\u00e5rningscookies<\/a>), med definierade egenskaper: form, storlek och mer.<\/p>\n<p>\u00c5 andra sidan har vi <strong>instanser. <\/strong>En instans \u00e4r ett enskilt objekt i en klass, som har en unik minnesadress.<\/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=\"Instanser i Python\" width=\"1024\" height=\"512\"><\/a><figcaption id=\"caption-attachment-97990\" class=\"wp-caption-text\">Instanser i Python<\/figcaption><\/figure>\n<p>Nu n\u00e4r du vet vad klasser och instanser \u00e4r f\u00f6r n\u00e5got, l\u00e5t oss definiera n\u00e5gra!<\/p>\n<p>F\u00f6r att definiera en klass i Python anv\u00e4nder du <strong>class<\/strong> f\u00f6ljt av dess namn. I det h\u00e4r fallet skapar du en klass som heter <strong>Cookie<\/strong>.<\/p>\n<p><strong>Observera: <\/strong>I Python anv\u00e4nder vi <a href=\"https:\/\/en.wikipedia.org\/wiki\/Camel_case#:~:text=Camel%20case%20(sometimes%20stylized%20as,word%20starting%20with%20either%20case.\">camel case-namnkonventionen<\/a> f\u00f6r att namnge klasser.<\/p>\n<pre><code class=\"language-python\">class Cookie:\n\tpass\n<\/code><\/pre>\n<p>\u00d6ppna ditt Python-skal och skriv koden ovan. F\u00f6r att skapa en instans av en klass, skriv bara dess namn och parentes efter det. Det \u00e4r samma process som att \u00e5beropa en funktion.<\/p>\n<pre><code class=\"language-python\">cookie1 = Cookie()\n<\/code><\/pre>\n<p>Grattis \u2013 du har just skapat ditt f\u00f6rsta objekt i Python! Du kan kontrollera dess id och typ med f\u00f6ljande kod:<\/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>Som du kan se har denna cookie en unik identifierare i minnet, och dess typ \u00e4r <strong>Cookie<\/strong>.<\/p>\n<p>Du kan ocks\u00e5 kontrollera om ett objekt \u00e4r en instans av en klass med <strong>isinstance()<\/strong>-funktionen.<\/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>Constructor Method<\/h3>\n<p><strong>__ init__()<\/strong>-metoden kallas ocks\u00e5 f\u00f6r konstrukt\u00f6ren. Den kallas Python varje g\u00e5ng vi instansierar ett objekt.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/se\/blog\/php-8\/#constructor-property-promotion\">Konstrukt\u00f6ren<\/a> skapar objektets ursprungliga tillst\u00e5nd med minsta upps\u00e4ttning parametrar den beh\u00f6ver existera. L\u00e5t oss \u00e4ndra <strong>Cookie<\/strong>-klassen s\u00e5 den accepterar parametrar i sin konstrukt\u00f6r.<\/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>I <strong>Cookie<\/strong>-klassen m\u00e5ste varje kaka ha ett namn, form och chips. Vi har definierat den sista som &#8221;choklad.\u201d<\/p>\n<p><strong>Self<\/strong> avser klassens instans (sj\u00e4lva objektet).<\/p>\n<p>F\u00f6rs\u00f6k att klistra in klassen i skalet och skapa en instans av kakan som vanligt.<\/p>\n<pre><code class=\"language-python\">cookie2 = Cookie()\n# TypeError\n<\/code><\/pre>\n<p>Du f\u00e5r ett fel. Det beror p\u00e5 att du m\u00e5ste tillhandah\u00e5lla den minsta upps\u00e4ttningen data som objektet beh\u00f6ver f\u00f6r att \u00f6verleva \u2013 i det h\u00e4r fallet, <strong>name<\/strong> och <strong>form<\/strong> eftersom vi redan har satt <strong>chips<\/strong> till &#8221;choklad&#8221;.<\/p>\n<pre><code class=\"language-python\">cookie2 = Cookie('Awesome cookie', 'Star')\n<\/code><\/pre>\n<p>F\u00f6r att komma \u00e5t attributen f\u00f6r en instans m\u00e5ste du anv\u00e4nda punktnotationen.<\/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\u00f6r tillf\u00e4llet har <strong>Cookie<\/strong>-klassen inget alltf\u00f6r saftigt. L\u00e5t oss l\u00e4gga till en provmetod, <strong>bake(), <\/strong>f\u00f6r att g\u00f6ra saker och ting mer intressanta.<\/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>F\u00f6r att anropa en metod, anv\u00e4nd punktnotationen och \u00e5beropa den som en funktion.<\/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>De 4 pelarna av OOP i Python<\/h2>\n<p>Objektorienterad programmering inneh\u00e5ller fyra huvudpelare:<\/p>\n<h4>1. Abstraktion<\/h4>\n<p>Abstraktion d\u00f6ljer den interna funktionaliteten hos ett program fr\u00e5n anv\u00e4ndaren. Anv\u00e4ndaren kan vara antingen slutklienten eller andra utvecklare.<\/p>\n<p>Vi kan hitta <strong>abstraktion<\/strong> i v\u00e5rt dagliga liv. Du vet till exempel hur du anv\u00e4nder telefonen, men du vet f\u00f6rmodligen inte exakt vad som h\u00e4nder i den varje g\u00e5ng du \u00f6ppnar en app.<\/p>\n<p>Ett annat exempel \u00e4r Python sj\u00e4lv. Du vet hur du anv\u00e4nder det f\u00f6r att bygga <a href=\"https:\/\/kinsta.com\/se\/blog\/cms-programvarorna\/\">funktionell programvara<\/a>, och du kan g\u00f6ra det \u00e4ven om du inte f\u00f6rst\u00e5r hur Python fungerar.<\/p>\n<p>Med samma kod kan du samla alla objekt i ett problem och <strong>abstrahera<\/strong> standardfunktionalitet i olika klasser.<\/p>\n<h4>2. Arv<\/h4>\n<p>Arv l\u00e5ter oss att definiera flera <strong>underklasser<\/strong> fr\u00e5n en redan definierad klass.<\/p>\n<p>Det prim\u00e4ra syftet med det \u00e4r att f\u00f6lja <a href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\">DRY-principen<\/a>. Du kommer att kunna \u00e5teranv\u00e4nda mycket kod genom att implementera alla delningskomponenter i <strong>superklasser<\/strong>.<\/p>\n<p>Du kan t\u00e4nka p\u00e5 det som det verkliga begreppet <strong>genetiskt arv<\/strong>. <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-barntema\/\">Barn<\/a> (underklass) \u00e4r resultatet av arv mellan tv\u00e5 f\u00f6r\u00e4ldrar (superklasser). De \u00e4rver alla fysiska egenskaper (attribut) och n\u00e5gra vanliga beteenden (metoder).<\/p>\n<h4>3. Polymorfism<\/h4>\n<p>Polymorfism l\u00e5ter oss \u00e4ndra metoder och attribut n\u00e5got f\u00f6r <strong>underklasser <\/strong>som tidigare definierats i <strong>superklassen<\/strong>.<\/p>\n<p>Den bokstavliga betydelsen \u00e4r &#8221;<strong>flera former<\/strong>.\u201d Det beror p\u00e5 att vi bygger metoder med samma namn men olika funktioner.<\/p>\n<p>Vi tar ett steg tillbaka till f\u00f6reg\u00e5ende id\u00e9, d\u00e4r barn ocks\u00e5 \u00e4r ett perfekt exempel p\u00e5 polymorfism. De kan \u00e4rva ett definierat beteende <strong>get_hungry() <\/strong>men p\u00e5 ett n\u00e5got annorlunda s\u00e4tt, till exempel, blir hungrig var 4:e timme i st\u00e4llet f\u00f6r var 6:e.<\/p>\n<h4>4. Inkapsling<\/h4>\n<p>Inkapsling \u00e4r processen d\u00e4r vi skyddar den interna integriteten hos data i en klass.<\/p>\n<p>\u00c4ven om det inte finns ett <strong>privat<\/strong> uttryck i Python kan du anv\u00e4nda inkapsling genom att anv\u00e4nda <a href=\"https:\/\/en.wikipedia.org\/wiki\/Name_mangling#Python\">mangling i Python<\/a>. Det finns speciella metoder som heter <strong>getters<\/strong> och <strong>setters<\/strong> som l\u00e5ter oss komma \u00e5t unika attribut och metoder.<\/p>\n<p>L\u00e5t oss f\u00f6rest\u00e4lla oss en <strong>m\u00e4nniska<\/strong>-klass som har ett unikt attribut som heter <strong>_l\u00e4ngd<\/strong>. Du kan \u00e4ndra detta attribut endast inom vissa begr\u00e4nsningar (det \u00e4r n\u00e4stan om\u00f6jligt att vara l\u00e4ngre \u00e4n 3 meter).<\/p>\n<h2>Bygg en areaber\u00e4kningskalkylator<\/h2>\n<p>En av de b\u00e4sta sakerna med Python \u00e4r att det l\u00e5ter oss skapa ett brett utbud av programvara, fr\u00e5n ett <a href=\"https:\/\/kinsta.com\/docs\/devkinsta\/wp-cli\/\">CLI-program (kommandoradsgr\u00e4nssnitt)<\/a> till en komplex webbapp.<\/p>\n<p>Nu n\u00e4r du har l\u00e4rt dig pelarbegreppen i OOP \u00e4r det dags att till\u00e4mpa dem p\u00e5 ett verkligt projekt.<\/p>\n<p><strong>Observera: <\/strong>All f\u00f6ljande kod kommer att finnas tillg\u00e4nglig i detta <a href=\"https:\/\/github.com\/DaniDiazTech\/Object-Oriented-Programming-in-Python\/blob\/main\/shape_calculator\/calculator.py\">GitHub-f\u00f6rr\u00e5d<\/a>. Ett <a href=\"https:\/\/kinsta.com\/se\/blog\/kodgranskningsverktygen\/#3-github\">kodrevisionsverktyg <\/a>som hj\u00e4lper oss att hantera kodversioner med Git.<\/p>\n<p>Din uppgift \u00e4r att skapa en areakalkylator f\u00f6r f\u00f6ljande former:<\/p>\n<ul>\n<li>Kvadrat<\/li>\n<li>Rektangel<\/li>\n<li>Triangel<\/li>\n<li>Cirkel<\/li>\n<li>Hexagon<\/li>\n<\/ul>\n<h3>Formbasklass<\/h3>\n<p>F\u00f6rst och fr\u00e4mst, skapa en fil <strong>calculator.py<\/strong> och \u00f6ppna den. Eftersom vi redan har objekten att arbeta med blir det l\u00e4tt att <strong>abstrahera<\/strong> dem i en klass.<\/p>\n<p>Du kan analysera de vanliga egenskaperna och m\u00e4rka att alla dessa \u00e4r <strong>2D-former<\/strong>. D\u00e4rf\u00f6r \u00e4r det b\u00e4sta alternativet att skapa en klass f\u00f6r <strong>Shape<\/strong> med en metod <strong>get_area() <\/strong>fr\u00e5n vilken varje form kommer att \u00e4rva.<\/p>\n<p><strong>Observera: <\/strong>Alla metoder borde vara verb. Det beror p\u00e5 att den h\u00e4r metoden heter <strong>get_area() <\/strong>och inte <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>Koden ovan definierar klassen; det finns dock inget intressant i den \u00e4nnu.<\/p>\n<p>L\u00e5t oss implementera standardfunktionen hos de flesta av dessa former.<\/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>L\u00e5t oss g\u00e5 igenom vad vi g\u00f6r med den h\u00e4r koden:<\/p>\n<ul>\n<li>I <strong>__init__<\/strong>-metoden beg\u00e4r vi tv\u00e5 parametrar, <strong>side1<\/strong> och <strong>side2<\/strong>. Dessa kommer att f\u00f6rbli som <strong>instance attributes<\/strong>, instansattribut.<\/li>\n<li><strong>get_area()<\/strong>-funktionen returnerar arean p\u00e5 formen. I det h\u00e4r fallet anv\u00e4nder den formeln f\u00f6r arean av en rektangel eftersom det blir l\u00e4ttare att implementera med andra former.<\/li>\n<li><strong>__ str__()<\/strong>-metoden \u00e4r en &#8221;magisk metod&#8221; precis som <strong>__ init__(). <\/strong>Den l\u00e5ter dig \u00e4ndra hur en instans skrivs ut.<\/li>\n<li>Det dolda attributet <strong>self.__class__.__name__ <\/strong>h\u00e4nvisar till namnet p\u00e5 klassen. Om du arbetade med en <strong>Triangle<\/strong>-klass skulle attributet vara &#8221;Triangle&#8221;.<\/li>\n<\/ul>\n<h3>Rectangle-klass<\/h3>\n<p>Eftersom vi genomf\u00f6rt formeln f\u00f6r arean av rektangeln kan vi skapa en enkel <strong>Rectangle<\/strong>-klass som bara \u00e4rver fr\u00e5n <strong>Shape<\/strong>-klassen.<\/p>\n<p>F\u00f6r att till\u00e4mpa <strong>inheritence<\/strong> i Python skapar du en klass som vanligt och omger den <strong>superclass<\/strong> du vill \u00e4rva fr\u00e5n med parenteser.<\/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>Square-klass<\/h3>\n<p>Vi kan ta en utm\u00e4rkt approach till <strong>polymorfism<\/strong> med <strong>Square<\/strong>-klassen.<\/p>\n<p>Kom ih\u00e5g att en kvadrat bara \u00e4r en rektangel vars fyra sidor alla \u00e4r lika l\u00e5nga. Det betyder att vi kan anv\u00e4nda samma formel f\u00f6r att ber\u00e4kna arean.<\/p>\n<p>Vi kan g\u00f6ra detta genom att \u00e4ndra <strong>init<\/strong>-metoden till att endast acceptera en <strong>side <\/strong>som parameter, och skicka det sidv\u00e4rdet till konstrukt\u00f6ren av<strong> Rectangle<\/strong>-klassen.<\/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>Som ni kan se skickar <a href=\"https:\/\/docs.python.org\/3\/library\/functions.html#super\">superfunktionen<\/a> <strong>side<\/strong>-parametern tv\u00e5 g\u00e5nger till <strong>superclass<\/strong>. Med andra ord, skickas <strong>side<\/strong> som b\u00e5de <strong>side1<\/strong> och <strong>side2<\/strong> till den tidigare definierade konstrukt\u00f6ren.<\/p>\n<h3>Triangle-klass<\/h3>\n<p>En triangel \u00e4r h\u00e4lften s\u00e5 stor som rektangeln som omger den.<\/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=\"F\u00f6rh\u00e5llande mellan trianglar och rektanglar\" width=\"300\" height=\"200\"><\/a><figcaption id=\"caption-attachment-97994\" class=\"wp-caption-text\">F\u00f6rh\u00e5llande mellan trianglar och rektanglar (bildk\u00e4lla: Varsity tutors).<\/figcaption><\/figure>\n<p>D\u00e4rf\u00f6r kan vi \u00e4rva fr\u00e5n <strong>Rectangle<\/strong>-klassen och \u00e4ndra <strong>get_area<\/strong>-metoden f\u00f6r att matcha areaformel f\u00f6r en triangel, som \u00e4r h\u00e4lften av basen multiplicerat med h\u00f6jden.<\/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>Ett annat anv\u00e4ndningsfall f\u00f6r <strong>Super()<\/strong>-funktionen \u00e4r att anropa en metod som definieras i <strong>superclass<\/strong> och lagra resultatet som en variabel. Det \u00e4r vad som h\u00e4nder inuti <strong>get_area()<\/strong>-metoden.<\/p>\n<h3>Circle-klass<\/h3>\n<p>Du kan hitta cirkelarean med formeln <strong>\u03c0r\u00b2<\/strong>, d\u00e4r <strong>r<\/strong> \u00e4r cirkelns radie. Det inneb\u00e4r att vi m\u00e5ste \u00e4ndra <strong>get_area()<\/strong>-metoden f\u00f6r att implementera denna formel.<\/p>\n<p><strong>Observera:<\/strong> Vi kan importera det ungef\u00e4rliga v\u00e4rdet av <strong>\u03c0<\/strong> fr\u00e5n matematikmodulen<\/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>Koden ovan definierar <strong>Circle<\/strong>-klassen som anv\u00e4nder en annan konstrukt\u00f6r och <strong>get_area()<\/strong>-metod.<\/p>\n<p>\u00c4ven om <strong>Circle<\/strong> \u00e4rver fr\u00e5n <strong>Shape<\/strong> kan du omdefiniera varje enskild metod och attribuera den efter eget tycke.<\/p>\n<h3>Hexagon-klass<\/h3>\n<p>Vi beh\u00f6ver bara l\u00e4ngden p\u00e5 en sida av en vanlig hexagon f\u00f6r att ber\u00e4kna dess area. Det liknar <strong>Square<\/strong>-klassen d\u00e4r vi bara skickar ett argument till konstrukt\u00f6ren.<\/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=\"Hexagon areaformel\" width=\"300\" height=\"165\"><\/a><figcaption id=\"caption-attachment-97996\" class=\"wp-caption-text\">Hexagon areaformel (bildk\u00e4lla: BYJU S)<\/figcaption><\/figure>\n<p>Formeln \u00e4r dock ganska annorlunda, och inkluderar anv\u00e4ndning av en kvadratrot. Det \u00e4r d\u00e4rf\u00f6r du anv\u00e4nder <strong>sqrt()<\/strong>-funktion fr\u00e5n matematikmodulen.<\/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>Testa v\u00e5ra klasser<\/h3>\n<p>Du kan \u00f6ppna ett interaktivt l\u00e4ge n\u00e4r du k\u00f6r en Python-fil med en fels\u00f6kare. Det enklaste s\u00e4ttet att g\u00f6ra detta \u00e4r att anv\u00e4nda den inbyggda <a href=\"https:\/\/docs.python.org\/3\/library\/functions.html#breakpoint\">breakpoint<\/a>-funktionen.<\/p>\n<p><strong>Observera: <\/strong>Denna funktion \u00e4r endast tillg\u00e4nglig i Python 3.7 eller senare.<\/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>K\u00f6r nu Python-filen och lek lite med de klasser du skapade.<\/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>Utmaning<\/h3>\n<p>Skapa en klass med metoden <strong>run<\/strong> d\u00e4r anv\u00e4ndaren kan v\u00e4lja en form och ber\u00e4kna dess area.<\/p>\n<p>N\u00e4r du har slutf\u00f6rt utmaningen kan du skicka en pull-f\u00f6rfr\u00e5gan till <a href=\"https:\/\/kinsta.com\/se\/blog\/git-vs-github\/\">GitHub-repot<\/a> eller publicera din l\u00f6sning i kommentarf\u00e4ltet.<\/p>\n\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=vmNem6wxfSQ\"><\/kinsta-video>\n<h2>Sammanfattning<\/h2>\n<p>Objektorienterad programmering \u00e4r ett paradigm d\u00e4r vi l\u00f6ser problem genom att t\u00e4nka p\u00e5 dem som <strong>objekt<\/strong>. Om du f\u00f6rst\u00e5r Python OOP kan du ocks\u00e5 enkelt till\u00e4mpa det p\u00e5 spr\u00e5k som <a href=\"https:\/\/kinsta.com\/se\/blog\/basta-programmeringsspraket-att-lara-sig\/#java\">Java<\/a>, <a href=\"https:\/\/kinsta.com\/se\/blog\/vad-ar-php\/\">PHP<\/a>, JavaScript, och <a href=\"https:\/\/kinsta.com\/se\/blog\/basta-programmeringsspraket-att-lara-sig\/#c-1\">C#<\/a>.<\/p>\n<p>I den h\u00e4r artikeln har du f\u00e5tt l\u00e4ra dig om:<\/p>\n<ul>\n<li>Begreppet objektorienterad i Python<\/li>\n<li>F\u00f6rdelar med objektorienterad \u00f6ver strukturerad programmering<\/li>\n<li>Grunderna i objektorienterad programmering i Python<\/li>\n<li>Begreppet <strong>klasser<\/strong> och hur man anv\u00e4nder dem i Python<\/li>\n<li><strong>Konstrukt\u00f6ren<\/strong> av en klass i Python<\/li>\n<li><strong>Metoder <\/strong>och <strong>attribut<\/strong> i Python<\/li>\n<li>De fyra pelarna i OOP<\/li>\n<li>Att anv\u00e4nda <strong>abstraktion<\/strong>, <strong>arv, <\/strong>och <strong>polymorfism<\/strong> i ett projekt<\/li>\n<\/ul>\n<p>Nu \u00e4r det din tur!<\/p>\n<p>Om du gillade denna guide, kolla in v\u00e5rt inl\u00e4gg om <a href=\"https:\/\/kinsta.com\/se\/blog\/python-guider\/\">Python Tutorials<\/a>.<\/p>\n<p><em>L\u00e5t oss veta din l\u00f6sning p\u00e5 utmaningen nedan i kommentarerna! Och gl\u00f6m inte att kolla in v\u00e5r <\/em><a href=\"https:\/\/kinsta.com\/se\/blog\/php-vs-python\/\"><em>j\u00e4mf\u00f6relseguide mellan Python och PHP<\/em><\/a><em>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Programmering \u00e4r en konst. Och precis som inom konst \u00e4r det viktigt att v\u00e4lja r\u00e4tt penslar och f\u00e4rger f\u00f6r att producera de b\u00e4sta arbetena. Pythons objektorienterade &#8230;<\/p>\n","protected":false},"author":181,"featured_media":41070,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[336,384],"topic":[],"class_list":["post-41069","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-programming","tag-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>En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)<\/title>\n<meta name=\"description\" content=\"L\u00e4r dig allt om Pythons objektorienterade programmering (OOP). Vi g\u00e5r igenom det fr\u00e5n begrepp till genomf\u00f6rande med m\u00e5nga exempel.\" \/>\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\/se\/blog\/pythons-objektorienterade-programmering\/\" \/>\n<meta property=\"og:locale\" content=\"sv_SE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)\" \/>\n<meta property=\"og:description\" content=\"L\u00e4r dig allt om Pythons objektorienterade programmering (OOP). Vi g\u00e5r igenom det fr\u00e5n begrepp till genomf\u00f6rande med m\u00e5nga exempel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstasweden\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-08T07:22:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-07T10:19:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/nyborjarguide-pythons-programmering.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\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=\"L\u00e4r dig allt om Pythons objektorienterade programmering (OOP). Vi g\u00e5r igenom det fr\u00e5n begrepp till genomf\u00f6rande med m\u00e5nga exempel.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/nyborjarguide-pythons-programmering.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@DaniDiazTech\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_se\" \/>\n<meta name=\"twitter:label1\" content=\"Skriven av\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Diaz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Ber\u00e4knad l\u00e4stid\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minuter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/\"},\"author\":{\"name\":\"Daniel Diaz\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2\"},\"headline\":\"En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)\",\"datePublished\":\"2021-10-08T07:22:28+00:00\",\"dateModified\":\"2023-06-07T10:19:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/\"},\"wordCount\":3765,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/nyborjarguide-pythons-programmering.jpeg\",\"keywords\":[\"programming\",\"Python\"],\"articleSection\":[\"Webbutveckling\"],\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/\",\"url\":\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/\",\"name\":\"En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/nyborjarguide-pythons-programmering.jpeg\",\"datePublished\":\"2021-10-08T07:22:28+00:00\",\"dateModified\":\"2023-06-07T10:19:13+00:00\",\"description\":\"L\u00e4r dig allt om Pythons objektorienterade programmering (OOP). Vi g\u00e5r igenom det fr\u00e5n begrepp till genomf\u00f6rande med m\u00e5nga exempel.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#breadcrumb\"},\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/nyborjarguide-pythons-programmering.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/nyborjarguide-pythons-programmering.jpeg\",\"width\":1024,\"height\":512,\"caption\":\"En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/se\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/se\/#website\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/se\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"sv-SE\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/se\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstasweden\/\",\"https:\/\/x.com\/kinsta_se\",\"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\/se\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2\",\"name\":\"Daniel Diaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/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\/se\/blog\/author\/danidiaztech\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)","description":"L\u00e4r dig allt om Pythons objektorienterade programmering (OOP). Vi g\u00e5r igenom det fr\u00e5n begrepp till genomf\u00f6rande med m\u00e5nga exempel.","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\/se\/blog\/pythons-objektorienterade-programmering\/","og_locale":"sv_SE","og_type":"article","og_title":"En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)","og_description":"L\u00e4r dig allt om Pythons objektorienterade programmering (OOP). Vi g\u00e5r igenom det fr\u00e5n begrepp till genomf\u00f6rande med m\u00e5nga exempel.","og_url":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstasweden\/","article_published_time":"2021-10-08T07:22:28+00:00","article_modified_time":"2023-06-07T10:19:13+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/nyborjarguide-pythons-programmering.jpeg","type":"image\/jpeg"}],"author":"Daniel Diaz","twitter_card":"summary_large_image","twitter_description":"L\u00e4r dig allt om Pythons objektorienterade programmering (OOP). Vi g\u00e5r igenom det fr\u00e5n begrepp till genomf\u00f6rande med m\u00e5nga exempel.","twitter_image":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/nyborjarguide-pythons-programmering.jpeg","twitter_creator":"@DaniDiazTech","twitter_site":"@kinsta_se","twitter_misc":{"Skriven av":"Daniel Diaz","Ber\u00e4knad l\u00e4stid":"19 minuter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/"},"author":{"name":"Daniel Diaz","@id":"https:\/\/kinsta.com\/se\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2"},"headline":"En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)","datePublished":"2021-10-08T07:22:28+00:00","dateModified":"2023-06-07T10:19:13+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/"},"wordCount":3765,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/nyborjarguide-pythons-programmering.jpeg","keywords":["programming","Python"],"articleSection":["Webbutveckling"],"inLanguage":"sv-SE","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/","url":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/","name":"En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/nyborjarguide-pythons-programmering.jpeg","datePublished":"2021-10-08T07:22:28+00:00","dateModified":"2023-06-07T10:19:13+00:00","description":"L\u00e4r dig allt om Pythons objektorienterade programmering (OOP). Vi g\u00e5r igenom det fr\u00e5n begrepp till genomf\u00f6rande med m\u00e5nga exempel.","breadcrumb":{"@id":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#breadcrumb"},"inLanguage":"sv-SE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/"]}]},{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#primaryimage","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/nyborjarguide-pythons-programmering.jpeg","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/nyborjarguide-pythons-programmering.jpeg","width":1024,"height":512,"caption":"En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/se\/"},{"@type":"ListItem","position":2,"name":"En nyb\u00f6rjarguide till Pythons objektorienterade programmering (OOP)"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/se\/#website","url":"https:\/\/kinsta.com\/se\/","name":"Kinsta\u00ae","description":"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar","publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/se\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"sv-SE"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/se\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/se\/","logo":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstasweden\/","https:\/\/x.com\/kinsta_se","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\/se\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2","name":"Daniel Diaz","image":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/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\/se\/blog\/author\/danidiaztech\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/41069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/users\/181"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/comments?post=41069"}],"version-history":[{"count":11,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/41069\/revisions"}],"predecessor-version":[{"id":53517,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/41069\/revisions\/53517"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41069\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41069\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41069\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41069\/translations\/pt"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41069\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41069\/translations\/nl"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41069\/translations\/de"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41069\/translations\/se"},{"href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41069\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media\/41070"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media?parent=41069"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/tags?post=41069"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/topic?post=41069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}