{"id":91883,"date":"2022-10-12T07:49:37","date_gmt":"2022-10-12T12:49:37","guid":{"rendered":"https:\/\/blogging-techies.com\/sw\/abstrakta-klasser-i-python-en-nyborjarguide\/"},"modified":"2022-10-12T07:49:37","modified_gmt":"2022-10-12T12:49:37","slug":"abstrakta-klasser-i-python-en-nyborjarguide","status":"publish","type":"post","link":"https:\/\/blogging-techies.com\/sw\/abstrakta-klasser-i-python-en-nyborjarguide\/","title":{"rendered":"Abstrakta klasser i Python: En nyb\u00f6rjarguide"},"content":{"rendered":"<div>\n<p class=\"heading_excerpt\">Om du letar efter en l\u00e4tt att f\u00f6lja guide om abstrakta klasser i Python, har du kommit till r\u00e4tt st\u00e4lle. <\/p>\n<figure>\n<\/figure>\n<p>En abstrakt klass \u00e4r en ritning f\u00f6r relaterade klasser.  Det kan inte instansieras utan kan bara n\u00e5s genom arv.  En underklass som \u00e4rver en abstrakt klass kr\u00e4vs f\u00f6r att implementera dess abstrakta metoder.  Annars kommer kompilatorn att flagga ett fel.<\/p>\n<p>Abstrakta metoder \u00e4r metoder utan implementering.  En abstrakt klass kan ha abstrakta metoder eller konkreta (normala) metoder.<\/p>\n<p>Python st\u00f6der inte direkt abstrakta metoder, men du kan komma \u00e5t dem via <strong>abc<\/strong> (abstrakt basklass) modul.<\/p>\n<h2 id=\"using-the-abc-module-in-python\"><span class=\"ez-toc-section\" id=\"Anvander_abc-modulen_i_Python\"><\/span>  Anv\u00e4nder abc-modulen i Python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>F\u00f6r att definiera en abstrakt klass i Python m\u00e5ste du <strong>importera<\/strong> abc-modulen.<\/p>\n<p>Se exemplet nedan:<\/p>\n<pre>from abc import ABC<br\/>class AbstractClassName(ABC):<br\/>pass<\/pre>\n<p>L\u00e4gg m\u00e4rke till nyckelordet <strong>passera<\/strong>.  Detta nyckelord anv\u00e4nds f\u00f6r att st\u00e5 f\u00f6r tom kod.  Att utel\u00e4mna det kommer att ge ett kompileringsfel.<\/p>\n<p>Klassdefinitioner, metoddefinitioner, loopar och <strong>om<\/strong> uttalanden f\u00f6rv\u00e4ntar sig kodimplementeringar.  S\u00e5 att utel\u00e4mna dem ger ett kompileringsfel.  F\u00f6r att undvika detta, anv\u00e4nd <strong>passera<\/strong> f\u00f6r att ers\u00e4tta den tomma koden.<\/p>\n<p>F\u00f6r att definiera en abstrakt metod i Python, anv\u00e4nd <strong>@abstraktmetod<\/strong> dekorat\u00f6r:<\/p>\n<pre>from abc import ABC, abstractmethod<br\/>class AbstractClassName(ABC):<br\/>@abstractmethod<br\/>def abstractMethod(self):<br\/>pass<br\/><\/pre>\n<p>Vid det h\u00e4r laget skulle det vara bra att n\u00e4mna att \u2013 till skillnad fr\u00e5n Java \u2013 kan abstrakta metoder i Python ha en implementering.. Denna implementering kan n\u00e5s i den \u00f6verordnade metoden med hj\u00e4lp av <strong>super()<\/strong> metod.<\/p>\n<pre>import abc<br\/>class AbstractClass(ABC):<br\/>def __init__(self, value):<br\/>self.value = value<br\/>super().__init__() <br\/>@abc.abstractmethod<br\/>def some_action(self):<br\/>print(\"This is the parent implementation.\")<br\/>class MySubclass(AbstractClassExample):<br\/>def some_action(self):<br\/>super().some_action()<br\/>print(\"This is the subclass implementation. \")<br\/>x = MySubclass()<br\/>x.some_action()<\/pre>\n<p>Det \u00e4r intressant att notera att du kan definiera en konstruktor i en abstrakt klass.<\/p>\n<p>P\u00e5 rad 9 kan du observera det <strong>@abc.abstractmetod<\/strong> har anv\u00e4nts som den abstrakta metoden dekorat\u00f6r.  Det h\u00e4r \u00e4r ett annat s\u00e4tt att g\u00f6ra det \u00e4n den tidigare formen.  Observera ocks\u00e5 att rad 1 \u00e4r kortare (<strong>import abc<\/strong>) \u00e4n den tidigare rad 1-importen som du anv\u00e4nde.<\/p>\n<p>Allt \u00e4r en fr\u00e5ga om val.  Men m\u00e5nga kanske tycker att den andra metoden \u00e4r kortare.<\/p>\n<h2 id=\"exception-handling-in-python\"><span class=\"ez-toc-section\" id=\"Undantagshantering_i_Python\"><\/span>  Undantagshantering i Python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Observera att det inte finns n\u00e5got s\u00e4tt att f\u00e5nga fel i kodexemplet ovan.  Buggar uppst\u00e5r oftare \u00e4n inte, och att ha ett tillf\u00f6rlitligt s\u00e4tt att f\u00e5 tag p\u00e5 dem kan vara en spelomvandlare.<\/p>\n<p>Dessa h\u00e4ndelser som st\u00f6r normalt programfl\u00f6de kallas \u201cundantag\u201d, och att hantera dem kallas \u201cundantagshantering\u201d.  N\u00e4sta p\u00e5 din Python-l\u00e4slista b\u00f6r vara undantagshantering.<\/p>\n<p>    <strong class=\"section-sub-title\">Om f\u00f6rfattaren<\/strong><\/p>\n<p>            <strong class=\"bio-title\">Jerome Davidson (33 artiklar publicerade)<br \/><\/strong><\/p>\n<p>Jerome \u00e4r personalskribent p\u00e5 MakeUseOf.  Han t\u00e4cker artiklar om programmering och Linux.  Han \u00e4r ocks\u00e5 en kryptoentusiast och h\u00e5ller alltid koll p\u00e5 kryptoindustrin.<\/p>\n<p>                            Mer fr\u00e5n Jerome Davidson<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Prenumerera_pa_vart_nyhetsbrev\"><\/span>Prenumerera p\u00e5 v\u00e5rt nyhetsbrev<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>G\u00e5 med i v\u00e5rt nyhetsbrev f\u00f6r tekniska tips, recensioner, free e-b\u00f6cker och exklusiva erbjudanden!<\/p>\n<p>Klicka h\u00e4r f\u00f6r att prenumerera<\/p>\n<\/p><\/div>\n  <div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blogging-techies.com\/sw\/abstrakta-klasser-i-python-en-nyborjarguide\/#Anvander_abc-modulen_i_Python\" >Anv\u00e4nder abc-modulen i Python<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blogging-techies.com\/sw\/abstrakta-klasser-i-python-en-nyborjarguide\/#Undantagshantering_i_Python\" >Undantagshantering i Python<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blogging-techies.com\/sw\/abstrakta-klasser-i-python-en-nyborjarguide\/#Prenumerera_pa_vart_nyhetsbrev\" >Prenumerera p\u00e5 v\u00e5rt nyhetsbrev<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n ","protected":false},"excerpt":{"rendered":"<p>Om du letar efter en l\u00e4tt att f\u00f6lja guide om abstrakta klasser i Python, har du kommit till r\u00e4tt st\u00e4lle. En abstrakt klass \u00e4r en ritning f\u00f6r relaterade klasser. Det kan inte instansieras utan kan bara n\u00e5s genom arv. En underklass som \u00e4rver en abstrakt klass kr\u00e4vs f\u00f6r att implementera dess abstrakta metoder. Annars kommer [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":91884,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[5],"tags":[45396,4582,35151,36048],"class_list":["post-91883","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bloggar","tag-abstrakta","tag-klasser","tag-nyborjarguide","tag-python"],"_links":{"self":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts\/91883","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/comments?post=91883"}],"version-history":[{"count":0,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts\/91883\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/media\/91884"}],"wp:attachment":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/media?parent=91883"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/categories?post=91883"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/tags?post=91883"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}