{"id":43440,"date":"2021-07-20T11:15:54","date_gmt":"2021-07-20T09:15:54","guid":{"rendered":"https:\/\/kinsta.com\/?p=97958"},"modified":"2023-08-22T05:10:31","modified_gmt":"2023-08-22T08:10:31","slug":"programacao-orientada-objetos-python","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/","title":{"rendered":"Um Guia para Iniciantes em Programa\u00e7\u00e3o Orientada a Objetos (POO) Python"},"content":{"rendered":"<p>A programa\u00e7\u00e3o \u00e9 uma arte. E, como na arte, selecionar os pinc\u00e9is e tintas adequados \u00e9 essencial para produzir os melhores trabalhos. A Programa\u00e7\u00e3o orientada a objetos Python \u00e9 uma dessas habilidades.<\/p>\n<p>A escolha da <a href=\"https:\/\/kinsta.com\/pt\/blog\/melhor-linguagem-de-programacao\/\">linguagem de programa\u00e7\u00e3o correta<\/a> \u00e9 uma parte crucial de qualquer projeto, e pode levar a um desenvolvimento fluido e agrad\u00e1vel ou a um pesadelo completo. Portanto, seria melhor se voc\u00ea usasse a linguagem mais adequada para seu caso de uso.<\/p>\n<p>Essa \u00e9 a principal raz\u00e3o para aprender programa\u00e7\u00e3o orientada a objetos em Python, que \u00e9 tamb\u00e9m uma das linguagens de programa\u00e7\u00e3o mais populares.<\/p>\n<p>Vamos aprender!<\/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>Um exemplo de programa Python<\/h2>\n<p>Antes de aprofundar no assunto, vamos fazer uma pergunta: voc\u00ea j\u00e1 escreveu um programa Python como o que est\u00e1 abaixo?<\/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>Este c\u00f3digo \u00e9 um simples adivinhador de n\u00fameros. Tente copi\u00e1-lo em um arquivo Python e execut\u00e1-lo em seu sistema. Ele cumpre perfeitamente seu prop\u00f3sito.<\/p>\n<p>Mas a\u00ed vem um enorme problema: e se lhe ped\u00edssemos para implementar um <a href=\"https:\/\/kinsta.com\/pt\/changelog\/\">novo recurso<\/a>? Poderia ser algo simples &#8211; por exemplo:<\/p>\n<p>&#8220;Se a entrada for um m\u00faltiplo do n\u00famero secreto, d\u00ea uma dica ao usu\u00e1rio&#8221;.<\/p>\n<p>O programa se tornaria rapidamente complexo e pesado \u00e0 medida que voc\u00ea aumentasse o n\u00famero de caracter\u00edsticas e, portanto, o n\u00famero total de condicionais aninhados.<\/p>\n<p>\u00c9 exatamente isso que a programa\u00e7\u00e3o orientada a objetos tenta resolver.<\/p>\n\n<h2>Requisitos para aprender OOP Python<\/h2>\n<p>Antes de entrar na programa\u00e7\u00e3o orientada a objetos, recomendamos fortemente que voc\u00ea tenha uma compreens\u00e3o firme dos conceitos b\u00e1sicos de Python.<\/p>\n<p>Classificar t\u00f3picos considerados &#8220;b\u00e1sicos&#8221; pode ser dif\u00edcil. Por causa disso, projetamos uma <a href=\"https:\/\/kinsta.com\/pt\/consulta-rapida\/\">checklist<\/a> com todos os principais conceitos necess\u00e1rios para aprender programa\u00e7\u00e3o orientada a objetos em Python.<\/p>\n<ul>\n<li><strong>Vari\u00e1vel: <\/strong>Nome simb\u00f3lico que aponta para um objeto espec\u00edfico (veremos o que <strong>os objetos <\/strong>significam atrav\u00e9s do artigo).<\/li>\n<li><strong>Operadores aritm\u00e9ticos: <\/strong>Adi\u00e7\u00e3o (+), subtra\u00e7\u00e3o (-), multiplica\u00e7\u00e3o (*), divis\u00e3o (\/), divis\u00e3o inteira (\/\/), modulo (%).<\/li>\n<li><strong>Tipos de dados incorporados: <\/strong>Num\u00e9ricos (inteiros, flutuadores, complexos), Seq\u00fc\u00eancias (strings, listas, tuplas), Booleanos (True, False), Dicion\u00e1rios, e Conjuntos.<\/li>\n<li><strong>Express\u00f5es booleanas: <\/strong>Express\u00f5es em que o resultado \u00e9 <strong>True <\/strong>ou <strong>False.<\/strong><\/li>\n<li><strong>Condicional: <\/strong>Avalia uma express\u00e3o booleana e faz algum processo dependendo do resultado. Manipulado por declara\u00e7\u00f5es <strong>if\/else.<\/strong><\/li>\n<li><strong>Loop: <\/strong>Execu\u00e7\u00e3o repetida de blocos de c\u00f3digo. Pode ser um loop <strong>for<\/strong> ou <strong>while<\/strong>.<\/li>\n<li><strong>Fun\u00e7\u00f5es: <\/strong>Bloco de c\u00f3digo organizado e reutiliz\u00e1vel. Voc\u00ea os cria com a palavra-chave <strong>def<\/strong>.<\/li>\n<li><strong>Argumentos: <\/strong>Objetos passados para uma fun\u00e7\u00e3o. Por exemplo: <code>sum([1, 2, 4])<\/code><\/li>\n<li><strong>Execute um script Python<\/strong>: Abra um terminal ou uma <a href=\"https:\/\/kinsta.com\/pt\/blog\/comandos-ssh\/\">linha de comando<\/a> e digite &#8220;python &lt;nome do arquivo&gt;&#8221;.<\/li>\n<li><strong>Abra uma shell Python<\/strong>: Abra um terminal e digite <code>python<\/code> ou <code>python3<\/code>, dependendo do seu sistema.<\/li>\n<\/ul>\n<p>Agora que voc\u00ea tem estes conceitos cristalinos, voc\u00ea pode avan\u00e7ar com a compreens\u00e3o da programa\u00e7\u00e3o orientada a objetos.<\/p>\n<h2>O que \u00e9 Programa\u00e7\u00e3o Orientada a Objetos em Python?<\/h2>\n<p>A Programa\u00e7\u00e3o Orientada a Objetos (OOP) \u00e9 um paradigma de programa\u00e7\u00e3o no qual podemos pensar em problemas complexos como objetos.<\/p>\n<p>Um paradigma \u00e9 uma teoria que fornece a base para a solu\u00e7\u00e3o de problemas.<\/p>\n<p>Portanto, quando falamos de OOP, estamos nos referindo a um conjunto de conceitos e padr\u00f5es que usamos para resolver problemas com objetos.<\/p>\n<p>Um objeto em Python \u00e9 uma \u00fanica cole\u00e7\u00e3o de dados (atributos) e comportamento (m\u00e9todos). Voc\u00ea pode pensar em objetos como coisas reais ao seu redor. Por exemplo, considere as calculadoras:<\/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=\"Uma calculadora pode ser um objeto.\" width=\"1024\" height=\"512\"><\/a><figcaption id=\"caption-attachment-97985\" class=\"wp-caption-text\">Uma calculadora pode ser um objeto.<\/figcaption><\/figure>\n<p>Como voc\u00ea pode notar, os dados (atributos) s\u00e3o sempre substantivos, enquanto os comportamentos (m\u00e9todo) s\u00e3o sempre verbos.<\/p>\n<p>Esta compartimenta\u00e7\u00e3o \u00e9 o conceito central da Programa\u00e7\u00e3o Orientada a Objetos. Voc\u00ea constr\u00f3i objetos que armazenam dados e cont\u00eam tipos espec\u00edficos de funcionalidade.<\/p>\n<h2>Por que usamos programa\u00e7\u00e3o orientada a objetos em Python?<\/h2>\n<p>OOP permite que voc\u00ea crie um software seguro e confi\u00e1vel. Muitas <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-vs-python\/#library-support\">estruturas Python e bibliotecas<\/a> usam este paradigma para construir sua base de c\u00f3digo. Alguns exemplos s\u00e3o Django, Kivy, pandas, NumPy, e TensorFlow.<\/p>\n<p>Vejamos as principais vantagens de usar o OOP em Python.<\/p>\n<h3>Vantagens do OOP Python<\/h3>\n<p>As seguintes raz\u00f5es far\u00e3o com que voc\u00ea opte pelo uso de programa\u00e7\u00e3o orientada a objetos em Python.<\/p>\n<h4>Todas as Linguagens de Programa\u00e7\u00e3o Moderna usam OOP<\/h4>\n<p>Este paradigma \u00e9 independente do idioma. Se voc\u00ea aprender OOP em Python, voc\u00ea ser\u00e1 capaz de us\u00e1-lo no seguinte:<\/p>\n<ul>\n<li>Java<\/li>\n<li>PHP (certifique-se de ler a <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-vs-python\/\">compara\u00e7\u00e3o entre PHP e Python<\/a>)<\/li>\n<li>Ruby<\/li>\n<li><a href=\"https:\/\/kinsta.com\/pt\/blog\/bibliotecas-javascript\/\">Javascript<\/a><\/li>\n<li>C#<\/li>\n<li>Kotlin<\/li>\n<\/ul>\n<p>Todos essas linguagens ou s\u00e3o nativamente orientados a objetos ou incluem op\u00e7\u00f5es de funcionalidade orientada a objetos. Se voc\u00ea quiser aprender qualquer uma delas ap\u00f3s Python, ser\u00e1 mais f\u00e1cil &#8211; voc\u00ea encontrar\u00e1 muitas semelhan\u00e7as entre as linguagens que trabalham com objetos.<\/p>\n<h4>OOP permite que voc\u00ea codifique mais r\u00e1pido<\/h4>\n<p>Codificar mais r\u00e1pido n\u00e3o significa escrever menos linhas de c\u00f3digo. Significa que voc\u00ea pode implementar mais recursos em menos tempo, sem comprometer a estabilidade de um projeto.<\/p>\n<p>A programa\u00e7\u00e3o orientada a objetos permite a reutiliza\u00e7\u00e3o do c\u00f3digo atrav\u00e9s da implementa\u00e7\u00e3o da <a href=\"#1-abstraction\">abstra\u00e7\u00e3o<\/a>. Este princ\u00edpio torna seu c\u00f3digo mais conciso e leg\u00edvel.<\/p>\n<p>Como voc\u00ea deve saber, os <a href=\"https:\/\/kinsta.com\/pt\/blog\/contrate-um-desenvolvedor-do-wordpress\/\">programadores<\/a> passam muito mais tempo lendo o c\u00f3digo do que escrevendo-o. \u00c9 a raz\u00e3o pela qual a legibilidade \u00e9 sempre mais importante do que obter recursos o mais r\u00e1pido poss\u00edvel.<\/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=\"A produtividade decresce com c\u00f3digo n\u00e3o leg\u00edvel\" width=\"1024\" height=\"512\"><\/a><figcaption id=\"caption-attachment-97986\" class=\"wp-caption-text\">A produtividade decresce com c\u00f3digo n\u00e3o leg\u00edvel<\/figcaption><\/figure>\n<p>Voc\u00ea ver\u00e1 mais sobre o princ\u00edpio da abstra\u00e7\u00e3o mais tarde.<\/p>\n<h4>OOP ajuda voc\u00ea a evitar o c\u00f3digo Spaghetti<\/h4>\n<p>Voc\u00ea se lembra do programa de adivinha\u00e7\u00e3o de n\u00fameros no in\u00edcio deste artigo?<\/p>\n<p>Se voc\u00ea continuar acrescentando recursos, voc\u00ea ter\u00e1 muitas declara\u00e7\u00f5es <strong>if <\/strong>aninhados no futuro. Este emaranhado de infinitas linhas de c\u00f3digo \u00e9 chamado de c\u00f3digo spaghetti, e voc\u00ea deve evit\u00e1-lo o m\u00e1ximo poss\u00edvel.<\/p>\n<p>O OOP nos d\u00e1 a possibilidade de <a href=\"https:\/\/kinsta.com\/pt\/blog\/ativar-compressao-gzip\/\">comprimir<\/a> toda a l\u00f3gica nos objetos, evitando assim longos trechos de <strong>&#8220;if&#8221; <\/strong>aninhados.<\/p>\n<h4>OOP melhora sua an\u00e1lise de qualquer situa\u00e7\u00e3o<\/h4>\n<p>Uma vez que voc\u00ea tenha alguma experi\u00eancia com OOP, voc\u00ea ser\u00e1 capaz de pensar em problemas como objetos pequenos e espec\u00edficos.<\/p>\n<p>Este entendimento leva a uma r\u00e1pida inicializa\u00e7\u00e3o do projeto.<\/p>\n<h3>Programa\u00e7\u00e3o Estruturada vs Programa\u00e7\u00e3o Orientada a Objetos<\/h3>\n<p>A programa\u00e7\u00e3o estruturada \u00e9 o paradigma mais utilizado pelos iniciantes porque \u00e9 a maneira mais simples de construir um pequeno programa.<\/p>\n<p>Envolve a execu\u00e7\u00e3o sequencial de um programa Python. Isso significa que voc\u00ea est\u00e1 dando ao computador uma lista de tarefas e depois executando-as de cima para baixo.<\/p>\n<p>Vamos ver um exemplo de programa\u00e7\u00e3o estruturada com um programa de cafeteria.<\/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>O c\u00f3digo acima age como um vendedor de caf\u00e9. Ele lhe pedir\u00e1 um or\u00e7amento e ent\u00e3o &#8220;vender\u00e1&#8221; o maior caf\u00e9 que voc\u00ea puder comprar.<\/p>\n<p>Tente rod\u00e1-lo no <a href=\"https:\/\/kinsta.com\/pt\/blog\/wp-cli-v2\/\">terminal<\/a>. Ele executar\u00e1 passo a passo, dependendo da sua entrada.<\/p>\n<p>Este c\u00f3digo funciona perfeitamente, mas temos tr\u00eas problemas:<\/p>\n<ol>\n<li>Tem uma l\u00f3gica muito repetida.<\/li>\n<li>Utiliza muitos condicionamentos <strong>if<\/strong>.<\/li>\n<li>Vai ser dif\u00edcil ler e modificar.<\/li>\n<\/ol>\n<p>O OOP foi inventado como uma solu\u00e7\u00e3o para todos esses problemas.<\/p>\n<p>Vamos ver o programa acima implementado com o OOP. N\u00e3o se preocupe se voc\u00ea ainda n\u00e3o o entendeu. \u00c9 apenas para comparar programa\u00e7\u00e3o estruturada e programa\u00e7\u00e3o orientada a objetos.<\/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>Nota: <\/strong>Todos os conceitos a seguir ser\u00e3o explicados mais profundamente atrav\u00e9s do artigo.<\/p>\n<p>O c\u00f3digo acima representa uma <strong>classe <\/strong>chamada &#8220;Coffee&#8221;. Ele tem dois atributos &#8211; &#8220;nome&#8221; e &#8220;pre\u00e7o&#8221; &#8211; e ambos s\u00e3o utilizados nos m\u00e9todos. O m\u00e9todo prim\u00e1rio \u00e9 &#8220;vender&#8221;, que processa toda a l\u00f3gica necess\u00e1ria para completar o processo de venda.<\/p>\n<p>Se voc\u00ea tentar administrar essa classe, n\u00e3o obter\u00e1 nenhum resultado. Isso ocorre principalmente porque estamos apenas declarando o &#8220;modelo&#8221; para os caf\u00e9s, n\u00e3o os caf\u00e9s em si.<\/p>\n<p>Vamos implementar essa classe com o seguinte c\u00f3digo:<\/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>Aqui estamos fazendo <strong>inst\u00e2ncias, <\/strong>ou objetos de caf\u00e9, da classe &#8220;Coffee&#8221;, chamando ent\u00e3o o m\u00e9todo &#8220;vender&#8221; de cada caf\u00e9 at\u00e9 que o usu\u00e1rio possa pagar qualquer op\u00e7\u00e3o.<\/p>\n<p>Obteremos o mesmo resultado com ambas as abordagens, mas podemos estender a funcionalidade do programa muito melhor com o OOP.<\/p>\n<p>Abaixo est\u00e1 uma tabela comparando a programa\u00e7\u00e3o orientada a objetos e a programa\u00e7\u00e3o estruturada:<\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>OOP<\/strong><\/td>\n<td><strong>Structured Programming<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Mais f\u00e1cil de manter<\/td>\n<td>Dif\u00edcil de manter<\/td>\n<\/tr>\n<tr>\n<td>N\u00e3o se repita (DRY)<\/td>\n<td>C\u00f3digo repetido em muitos lugares<\/td>\n<\/tr>\n<tr>\n<td>Pequenos trechos de c\u00f3digo reutilizados em muitos lugares<\/td>\n<td>Uma grande quantidade de c\u00f3digo em poucos lugares<\/td>\n<\/tr>\n<tr>\n<td>Abordagem por objetos<\/td>\n<td>Abordagem por c\u00f3digo de bloco<\/td>\n<\/tr>\n<tr>\n<td>Mais f\u00e1cil de <a href=\"https:\/\/kinsta.com\/pt\/blog\/wordpress-debug\/\">depurar<\/a><\/td>\n<td>Mais dif\u00edcil de depurar<\/td>\n<\/tr>\n<tr>\n<td>Grande curva de aprendizagem<\/td>\n<td>Curva de aprendizagem mais simples<\/td>\n<\/tr>\n<tr>\n<td>Utilizado em <a href=\"https:\/\/kinsta.com\/pt\/clientes\/\">grandes projetos<\/a><\/td>\n<td>Otimizado para programas simples<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Para concluir a compara\u00e7\u00e3o de paradigmas:<\/p>\n<ul>\n<li>Nenhum dos dois paradigmas \u00e9 perfeito (o OOP pode ser esmagador para ser usado em projetos simples).<\/li>\n<li>Estas s\u00e3o apenas duas maneiras de resolver um problema; existem outras por a\u00ed.<\/li>\n<li>O OOP \u00e9 usado em grandes bases de c\u00f3digo, enquanto a programa\u00e7\u00e3o estruturada \u00e9 principalmente para projetos simples.<\/li>\n<\/ul>\n<p>Vamos passar a objetos embutidos em Python.<\/p>\n<h2>Tudo \u00e9 um objeto em Python<\/h2>\n<p>Vamos lhe contar um segredo: voc\u00ea tem usado o OOP o tempo todo sem se dar conta.<\/p>\n<p>Mesmo quando se usa outros paradigmas em Python, ainda se usa objetos para fazer quase tudo.<\/p>\n<p>Isso porque, em Python, <em>tudo <\/em>\u00e9 um objeto.<\/p>\n<p>Lembre-se da defini\u00e7\u00e3o de objeto: Um objeto em Python \u00e9 uma \u00fanica cole\u00e7\u00e3o de dados (atributos) e comportamento (m\u00e9todos).<\/p>\n<p>Isso corresponde a qualquer tipo de dado em Python.<\/p>\n<p>Uma string \u00e9 uma cole\u00e7\u00e3o de dados (caracteres) e comportamentos (<strong>upper<\/strong><strong>()<\/strong>, <strong>lower<\/strong><strong>()<\/strong>, etc.). O mesmo se aplica a <strong>inteiros<\/strong>, flutuante, <strong>booleanos<\/strong>, <strong>listas <\/strong>e dicion\u00e1rios.<\/p>\n<p>Antes de continuar, vamos rever o significado dos atributos e m\u00e9todos.<\/p>\n<h3>Atributos e m\u00e9todos<\/h3>\n<p>Os atributos s\u00e3o <strong>vari\u00e1veis <\/strong>internas dentro dos objetos, enquanto os m\u00e9todos s\u00e3o <strong>fun\u00e7\u00f5es <\/strong>que produzem algum comportamento.<\/p>\n<p>Vamos fazer um exerc\u00edcio simples na shell Python. Voc\u00ea pode abri-la digitando <code>python<\/code> ou <code>python3<\/code> em seu 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=\"Concha Python \" width=\"843\" height=\"123\"><\/a><figcaption id=\"caption-attachment-97989\" class=\"wp-caption-text\">shell Python<\/figcaption><\/figure>\n<p>Agora, vamos trabalhar com a <a href=\"https:\/\/kinsta.com\/pt\/blog\/ssh-vs-ssl\/\">shell<\/a> Python para descobrir m\u00e9todos e tipos.<\/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>Na segunda linha, estamos chamando um m\u00e9todo de string, <strong>upper<\/strong><strong>()<\/strong>. Ele retorna o conte\u00fado da cadeia tudo em mai\u00fasculas. Entretanto, ele n\u00e3o muda a vari\u00e1vel original.<\/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>Vamos mergulhar em fun\u00e7\u00f5es valiosas ao trabalhar com objetos.<\/p>\n<p>A fun\u00e7\u00e3o <strong>tipo() <\/strong>permite obter o tipo de um objeto. O &#8220;tipo&#8221; \u00e9 a classe \u00e0 qual o objeto pertence.<\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; type(kinsta)\n# class 'str'\n<\/code><\/pre>\n<p>A fun\u00e7\u00e3o <strong>dir() <\/strong>retorna todos os atributos e m\u00e9todos de um objeto. Vamos test\u00e1-lo com a vari\u00e1vel <strong>kinsta.<\/strong><\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; dir(kinsta)\n['__add__', '__class__',  ........... 'upper', 'zfill']\n<\/code><\/pre>\n<p>Agora, tente imprimir alguns dos atributos ocultos deste objeto.<\/p>\n<pre><code class=\"language-python\"> &gt;&gt;&gt; kinsta.__class__ # class \u2018str\u2019 e&gt;<\/code><\/pre>\n<p>Isto produzir\u00e1 a classe \u00e0 qual o objeto <strong>kinsta <\/strong>pertence. Portanto, podemos dizer que a \u00fanica coisa que a fun\u00e7\u00e3o do<strong> tipo <\/strong>retorna \u00e9 o atributo <strong>__classe__ <\/strong>de um objeto.<\/p>\n<p>Voc\u00ea pode experimentar todos os tipos de dados, descobrindo todos os seus atributos e m\u00e9todos diretamente no terminal. Voc\u00ea pode saber mais sobre os tipos de dados incorporados na <a href=\"https:\/\/docs.python.org\/3\/library\/stdtypes.html\">documenta\u00e7\u00e3o oficial<\/a>.<\/p>\n<h2>Seu primeiro objeto em Python<\/h2>\n<p>Uma <strong>classe <\/strong>\u00e9 como um modelo<strong>.<\/strong> Ela permite criar objetos personalizados com base nos atributos e m\u00e9todos que voc\u00ea define.<\/p>\n<p>Voc\u00ea pode pensar nisso como um <strong>cortador de cookies <\/strong>que voc\u00ea modifica para assar os cookies perfeitos (objetos, n\u00e3o <a href=\"https:\/\/kinsta.com\/pt\/blog\/cookies-e-sessoes-php-wordpres\/\">cookies de rastreamento<\/a>), com caracter\u00edsticas definidas: Forma, tamanho, e muito mais.<\/p>\n<p>Por outro lado, temos <strong>inst\u00e2ncias. <\/strong>Uma inst\u00e2ncia \u00e9 um objeto individual de uma classe, que tem um endere\u00e7o de mem\u00f3ria \u00fanico.<\/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=\"Inst\u00e2ncias em Python\" width=\"1024\" height=\"512\"><\/a><figcaption id=\"caption-attachment-97990\" class=\"wp-caption-text\">Inst\u00e2ncias em Python<\/figcaption><\/figure>\n<p>Agora que voc\u00ea sabe o que s\u00e3o classes e inst\u00e2ncias, vamos definir algumas!<\/p>\n<p>Para definir uma classe em Python, voc\u00ea usa a palavra-chave <strong>class<\/strong>, seguida de seu nome. Neste caso, voc\u00ea criar\u00e1 uma classe chamada <strong>Cookie<\/strong>.<\/p>\n<p><strong>Nota: <\/strong>Em Python, usamos a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Camel_case#:~:text=Camel%20case%20(sometimes%20stylized%20as,word%20starting%20with%20either%20case.\">conven\u00e7\u00e3o de nomes em mai\u00fasculas<\/a> para as classes..<\/p>\n<pre><code class=\"language-python\">class Cookie:\n\tpass\n<\/code><\/pre>\n<p>Abra sua shell Python e digite o c\u00f3digo acima. Para criar uma inst\u00e2ncia de uma classe, basta digitar seu nome e par\u00eanteses ap\u00f3s ela. \u00c9 o mesmo processo que a invoca\u00e7\u00e3o de uma fun\u00e7\u00e3o.<\/p>\n<pre><code class=\"language-python\">cookie1 = Cookie()\n<\/code><\/pre>\n<p>Parab\u00e9ns &#8211; voc\u00ea acaba de criar seu primeiro objeto em Python! Voc\u00ea pode verificar sua identifica\u00e7\u00e3o e digitar com o seguinte c\u00f3digo:<\/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>Como voc\u00ea pode ver, este cookie tem um identificador \u00fanico na mem\u00f3ria, e seu tipo \u00e9 <strong>Cookie<\/strong>.<\/p>\n<p>Voc\u00ea tamb\u00e9m pode verificar se um objeto \u00e9 uma inst\u00e2ncia de uma classe com a fun\u00e7\u00e3o <strong>isinstance<\/strong><strong>().<\/strong><\/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>M\u00e9todo construtor<\/h3>\n<p>O m\u00e9todo <strong>__init__() <\/strong>tamb\u00e9m \u00e9 chamado de &#8220;construtor&#8221;. \u00c9 chamado de Python cada vez que instanciamos um objeto.<\/p>\n<p>O <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-8\/#constructor-property-promotion\">construtor<\/a> cria o estado inicial do objeto com o conjunto m\u00ednimo de par\u00e2metros que ele precisa para existir. Vamos modificar a classe <strong>Cookie<\/strong>, para que ela aceite par\u00e2metros em seu construtor.<\/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>Na classe <strong>Cookie<\/strong>, cada cookie deve ter um nome, forma e lascas. N\u00f3s definimos o \u00faltimo como &#8220;Chocolate&#8221;.<\/p>\n<p>Por outro lado, <strong>self<\/strong> refere-se \u00e0 inst\u00e2ncia da classe (o pr\u00f3prio objeto).<\/p>\n<p>Tente colar a classe na classe e criar uma inst\u00e2ncia do cookie como de costume.<\/p>\n<pre><code class=\"language-python\">cookie2 = Cookie()\n# TypeError\n<\/code><\/pre>\n<p>Voc\u00ea vai receber um erro. Isso porque voc\u00ea deve fornecer o conjunto m\u00ednimo de dados que o objeto precisa para viver &#8211; neste caso, <strong>nome <\/strong>e <strong>forma, <\/strong>uma vez que j\u00e1 definimos <strong>chips <\/strong>para &#8220;Chocolate&#8221;.<\/p>\n<pre><code class=\"language-python\">cookie2 = Cookie('Awesome cookie', 'Star')\n<\/code><\/pre>\n<p>Para acessar os atributos de uma inst\u00e2ncia, voc\u00ea deve usar a nota\u00e7\u00e3o de pontos.<\/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>Por enquanto, a classe <strong>Cookie <\/strong>n\u00e3o tem nada muito suculento. Vamos adicionar um m\u00e9todo de <strong>cozimento de amostra() <\/strong>para tornar as coisas mais interessantes.<\/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>Para chamar um m\u00e9todo, use a nota\u00e7\u00e3o de ponto e invoque-o como uma fun\u00e7\u00e3o.<\/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>Os 4 pilares do OOP em Python<\/h2>\n<p>A Programa\u00e7\u00e3o Orientada a Objetos inclui quatro pilares principais:<\/p>\n<h4>1. Abstra\u00e7\u00e3o<\/h4>\n<p>A abstra\u00e7\u00e3o esconde do usu\u00e1rio a funcionalidade interna de uma aplica\u00e7\u00e3o. O usu\u00e1rio pode ser o cliente final ou outros desenvolvedores.<\/p>\n<p>Podemos encontrar <strong>abstra\u00e7\u00e3o <\/strong>em nossa vida di\u00e1ria. Por exemplo, voc\u00ea sabe como usar seu telefone, mas provavelmente n\u00e3o sabe exatamente o que est\u00e1 acontecendo dentro dele cada vez que voc\u00ea abre um aplicativo.<\/p>\n<p>Outro exemplo \u00e9 a pr\u00f3pria Python. Voc\u00ea sabe como us\u00e1-lo para construir <a href=\"https:\/\/kinsta.com\/pt\/blog\/softwares-cms\/\">software funcional<\/a>, e pode faz\u00ea-lo mesmo que n\u00e3o entenda o funcionamento interno do Python.<\/p>\n<p>Aplicar o mesmo ao c\u00f3digo permite coletar todos os objetos em um problema e <strong>abstrair <\/strong>a funcionalidade padr\u00e3o em classes.<\/p>\n<h4>2. Heran\u00e7a<\/h4>\n<p>A heran\u00e7a nos permite definir v\u00e1rias <strong>subclasses <\/strong>a partir de uma classe j\u00e1 definida.<\/p>\n<p>O objetivo principal \u00e9 seguir o <a href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\">princ\u00edpio DRY<\/a>. Voc\u00ea poder\u00e1 reutilizar muito c\u00f3digo, implementando todos os componentes de compartilhamento em <strong>superclasses<\/strong>.<\/p>\n<p>Voc\u00ea pode pensar nisso como o conceito de <strong>heran\u00e7a gen\u00e9tica da <\/strong>vida real. As <a href=\"https:\/\/kinsta.com\/pt\/blog\/tema-filho-no-wordpress\/\">crian\u00e7as<\/a> (subclasse) s\u00e3o o resultado da heran\u00e7a entre dois pais (superclasses). Eles herdam todas as caracter\u00edsticas f\u00edsicas (atributos) e alguns comportamentos (m\u00e9todos) comuns.<\/p>\n<h4>3. Polimorfismo<\/h4>\n<p>O polimorfismo nos permite modificar ligeiramente os m\u00e9todos e atributos das <strong>subclasses <\/strong>previamente definidas na <strong>superclasse<\/strong>.<\/p>\n<p>O significado literal \u00e9 &#8220;<strong>muitas formas<\/strong>&#8220;. Isso porque constru\u00edmos m\u00e9todos com o mesmo nome, mas com funcionalidades diferentes.<\/p>\n<p>Voltando \u00e0 id\u00e9ia anterior, as crian\u00e7as tamb\u00e9m s\u00e3o um exemplo perfeito de polimorfismo. Elas podem herdar um comportamento definido de <strong>ficar_cansadas() <\/strong>mas de uma maneira ligeiramente diferente, por exemplo, ficar com fome a cada 4 horas em vez de a cada 6 horas.<\/p>\n<h4>4. Encapsulamento<\/h4>\n<p>Encapsulamento \u00e9 o processo no qual protegemos a integridade interna dos dados em uma classe.<\/p>\n<p>Embora n\u00e3o haja uma declara\u00e7\u00e3o <strong>privada <\/strong>em Python, voc\u00ea pode aplicar o encapsulamento usando o <a href=\"https:\/\/en.wikipedia.org\/wiki\/Name_mangling#Python\">mangling em Python<\/a>. H\u00e1 m\u00e9todos especiais chamados <strong>getters <\/strong>e <strong>setters <\/strong>que nos permitem acessar atributos e m\u00e9todos \u00fanicos.<\/p>\n<p>Imaginemos uma classe <strong>humana <\/strong>que tem um atributo \u00fanico chamado <strong>_altura<\/strong>. Voc\u00ea s\u00f3 pode modificar este atributo dentro de certas restri\u00e7\u00f5es (\u00e9 quase imposs\u00edvel ser superior a 3 metros).<\/p>\n<h2>Construindo uma \u00e1rea com a calculadora de resolu\u00e7\u00e3o de shapes<\/h2>\n<p>Uma das melhores coisas sobre Python \u00e9 que ele nos permite criar uma grande variedade de software, desde um programa <a href=\"https:\/\/kinsta.com\/pt\/docs\/devkinsta\/wp-cli\/\">CLI (interface de linha de comando)<\/a> at\u00e9 um aplicativo web complexo.<\/p>\n<p>Agora que voc\u00ea aprendeu os conceitos de pilares do OOP, \u00e9 hora de aplic\u00e1-los a um projeto real.<\/p>\n<p><strong>Nota: <\/strong>Todos os c\u00f3digos a seguir estar\u00e3o dispon\u00edveis dentro deste <a href=\"https:\/\/github.com\/DaniDiazTech\/Object-Oriented-Programming-in-Python\/blob\/main\/shape_calculator\/calculator.py\">reposit\u00f3rio GitHub<\/a>. Uma <a href=\"https:\/\/kinsta.com\/pt\/blog\/ferramentas-de-revisao-de-codigo\/#3-github\">ferramenta de revis\u00e3o de c\u00f3digo<\/a> que nos ajuda a gerenciar as vers\u00f5es de c\u00f3digo com Git.<\/p>\n<p>Sua tarefa \u00e9 criar uma calculadora de \u00e1rea com as seguintes shapes:<\/p>\n<ul>\n<li>Quadrado<\/li>\n<li>Rect\u00e2ngulo<\/li>\n<li>Tri\u00e2ngulo<\/li>\n<li>C\u00edrculo<\/li>\n<li>Hex\u00e1gono<\/li>\n<\/ul>\n<h3>Formato class shape<\/h3>\n<p>Primeiramente, criar um arquivo <strong>calculator.py <\/strong>e abri-lo. Como j\u00e1 temos os objetos para trabalhar, ser\u00e1 f\u00e1cil de <b>abstract<\/b><strong>\u00a0<\/strong>em uma classe.<\/p>\n<p>Voc\u00ea pode analisar as caracter\u00edsticas comuns e descobrir que todas estas s\u00e3o <strong>formatos 2D<\/strong>. Portanto, a melhor op\u00e7\u00e3o \u00e9 criar uma shape<strong>\u00a0<\/strong>class com um m\u00e9todo <strong>get_area() <\/strong>do qual cada forma herdar\u00e1.<\/p>\n<p><strong>Nota: <\/strong>Todos os m\u00e9todos devem ser verbos. Isso porque este m\u00e9todo \u00e9 chamado <strong>get_area() <\/strong>e n\u00e3o <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>O c\u00f3digo acima define a classe; no entanto, ainda n\u00e3o h\u00e1 nada de interessante nela.<\/p>\n<p>Vamos implementar a funcionalidade padr\u00e3o da maioria dessas formas.<\/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>Vamos analisar o que estamos fazendo com este c\u00f3digo:<\/p>\n<ul>\n<li>No m\u00e9todo <strong>__init__<\/strong>, estamos solicitando dois par\u00e2metros, <strong>side1<\/strong>\u00a0e <strong>side2<\/strong>. Estes permanecer\u00e3o como <strong>atributos de inst\u00e2ncia<\/strong>.<\/li>\n<li>A fun\u00e7\u00e3o <strong>get_area() <\/strong>retorna a \u00e1rea da forma. Neste caso, ela est\u00e1 usando a f\u00f3rmula de \u00e1rea de um ret\u00e2ngulo, uma vez que ser\u00e1 mais f\u00e1cil de implementar com outras formas.<\/li>\n<li>O m\u00e9todo <strong>__str__() <\/strong>\u00e9 um &#8220;m\u00e9todo m\u00e1gico&#8221;, assim como <strong>__init__(). <\/strong>Ele permite modificar a forma como uma inst\u00e2ncia ir\u00e1 imprimir.<\/li>\n<li>O atributo oculto <strong>auto.__classe__.__name__ <\/strong>se refere ao nome da classe. Se voc\u00ea estivesse trabalhando com uma classe <strong>Tri\u00e2ngulo<\/strong>, esse atributo seria &#8220;Tri\u00e2ngulo&#8221;.<\/li>\n<\/ul>\n<h3>Rectangle Class<\/h3>\n<p>Como implementamos a f\u00f3rmula de \u00e1rea do Ret\u00e2ngulo, poder\u00edamos criar uma classe simples de <strong>Rectangle<\/strong> que n\u00e3o faz nada al\u00e9m de herdar da classe <strong>shape.<\/strong><\/p>\n<p>Para aplicar <strong>inheritance<\/strong> em Python, voc\u00ea criar\u00e1 uma classe como de costume e cercar\u00e1 a <strong>superclasse <\/strong>da qual voc\u00ea quer herdar entre par\u00eanteses.<\/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 id=\"square-class\" class=\"has-anchor-hash\">Square Class<\/h3>\n<p>Podemos ter uma excelente abordagem do <strong>polimorfismo<\/strong> com a classe <strong>Square.<\/strong><\/p>\n<p>Lembre-se de que um quadrado \u00e9 apenas um ret\u00e2ngulo cujos quatro lados s\u00e3o todos iguais. Isso significa que podemos usar a mesma f\u00f3rmula para obter a \u00e1rea.<\/p>\n<p>Podemos fazer isso modificando o m\u00e9todo <strong>init<\/strong>, aceitando apenas um <b>side<\/b>\u00a0como par\u00e2metro e passando esse valor de lado para o construtor da classe <strong>Rectangle.<\/strong><\/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>Como voc\u00ea pode ver, a <a href=\"https:\/\/docs.python.org\/3\/library\/functions.html#super\">superfun\u00e7\u00e3o<\/a> passa duas vezes o par\u00e2metro <b>side<\/b>\u00a0para a <strong>superclasse<\/strong>. Em outras palavras, ela passa o <strong>side <\/strong>tanto como <b>side<\/b><strong>1 <\/strong>como <b>side<\/b><strong>2 <\/strong>para o construtor previamente definido.<\/p>\n<h3 id=\"triangle-class\" class=\"has-anchor-hash\">Triangle Class<\/h3>\n<p>Um tri\u00e2ngulo \u00e9 metade do tamanho do ret\u00e2ngulo que o cerca.<\/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=\"Rela\u00e7\u00e3o entre tri\u00e2ngulos e ret\u00e2ngulos (Fonte de imagem: Varsity tutors).\" width=\"300\" height=\"200\"><\/a><figcaption id=\"caption-attachment-97994\" class=\"wp-caption-text\">Rela\u00e7\u00e3o entre tri\u00e2ngulos e ret\u00e2ngulos (Fonte de imagem: Varsity tutors).<\/figcaption><\/figure>\n<p>Portanto, podemos herdar da classe <strong>Rectangle <\/strong>e modificar o m\u00e9todo <strong>get_area <\/strong>para corresponder \u00e0 f\u00f3rmula da \u00e1rea triangular, que \u00e9 a metade da base multiplicada pela altura.<\/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>Outro caso de uso da fun\u00e7\u00e3o <strong>super() <\/strong>\u00e9 chamar um m\u00e9todo definido na <strong>superclasse <\/strong>e armazenar o resultado como uma vari\u00e1vel. \u00c9 isso que est\u00e1 acontecendo dentro do m\u00e9todo <strong>get_area().<\/strong><\/p>\n<h3>Classe Circle<\/h3>\n<p>Voc\u00ea pode encontrar a \u00e1rea do c\u00edrculo com a f\u00f3rmula <strong>\u03c0r\u00b2<\/strong>, onde <strong>r <\/strong>\u00e9 o raio do c\u00edrculo. Isso significa que temos que modificar o m\u00e9todo <strong>get_area() <\/strong>para implementar essa f\u00f3rmula.<\/p>\n<p><strong>Nota: <\/strong>Podemos importar o valor aproximado de <strong>\u03c0 <\/strong>a partir do m\u00f3dulo de matem\u00e1tica<\/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>O c\u00f3digo acima define a classe <strong>Circle<\/strong>, que usa um construtor diferente e m\u00e9todos <strong>get_area().<\/strong><\/p>\n<p>Embora <strong>o Circle <\/strong>herde da classe <strong>Shape<\/strong>, voc\u00ea pode redefinir cada um dos m\u00e9todos e atribu\u00ed-los a seu gosto.<\/p>\n<h3 id=\"regular-hexagon-class\" class=\"has-anchor-hash\">Regular Hexagon Class<\/h3>\n<p>Precisamos apenas do comprimento de um lado de um hex\u00e1gono regular para calcular sua \u00e1rea. \u00c9 semelhante \u00e0 classe <strong>Square<\/strong>, onde apenas passamos uma discuss\u00e3o para o construtor.<\/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=\"F\u00f3rmula da \u00e1rea do hex\u00e1gono (Fonte de imagem: BYJU'S)\" width=\"300\" height=\"165\"><\/a><figcaption id=\"caption-attachment-97996\" class=\"wp-caption-text\">F\u00f3rmula da \u00e1rea do hex\u00e1gono (Fonte de imagem: BYJU&#8217;S)<\/figcaption><\/figure>\n<p>Entretanto, a f\u00f3rmula \u00e9 bem diferente, e implica no uso de uma raiz quadrada. \u00c9 por isso que voc\u00ea usar\u00e1 a fun\u00e7\u00e3o <strong>sqrt() <\/strong>do m\u00f3dulo de matem\u00e1tica.<\/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>Testando nossas aulas<\/h3>\n<p>Voc\u00ea pode entrar em um modo interativo ao executar um arquivo Python usando um depurador. A maneira mais simples de fazer isso \u00e9 usando a fun\u00e7\u00e3o de <a href=\"https:\/\/docs.python.org\/3\/library\/functions.html#breakpoint\">breakpoint<\/a> integrada.<\/p>\n<p><strong>Nota: <\/strong>Esta fun\u00e7\u00e3o est\u00e1 dispon\u00edvel apenas em Python 3.7 ou mais recente.<\/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>Agora, execute o arquivo Python e brinque com as classes que voc\u00ea criou.<\/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>Desafio<\/h3>\n<p>Criar uma classe com um m\u00e9todo de <b>run<\/b>\u00a0onde o usu\u00e1rio pode escolher uma forma e calcular sua \u00e1rea.<\/p>\n<p>Quando tiver completado o desafio, voc\u00ea pode enviar um pedido de retirada para o <a href=\"https:\/\/kinsta.com\/pt\/blog\/git-vs-github\/\">GitHub repo<\/a> ou publicar sua solu\u00e7\u00e3o na se\u00e7\u00e3o de coment\u00e1rios.<\/p>\n\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=vmNem6wxfSQ\"><\/kinsta-video>\n<h2>Resumo<\/h2>\n<p>A programa\u00e7\u00e3o orientada a objetos \u00e9 um paradigma no qual resolvemos problemas pensando neles como <strong>objetos<\/strong>. Se voc\u00ea entende Python OOP, voc\u00ea tamb\u00e9m pode aplic\u00e1-lo facilmente em linguagens como <a href=\"https:\/\/kinsta.com\/pt\/blog\/melhor-linguagem-de-programacao\/#java\">Java<\/a>, <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-php\/\">PHP<\/a>, Javascript, e <a href=\"https:\/\/kinsta.com\/pt\/blog\/melhor-linguagem-de-programacao\/#c-1\">C#<\/a>.<\/p>\n<p>Neste artigo, voc\u00ea tomou conhecimento:<\/p>\n<ul>\n<li>O conceito de orienta\u00e7\u00e3o a objetos em Python<\/li>\n<li>Vantagens da programa\u00e7\u00e3o orientada a objetos sobre a programa\u00e7\u00e3o estruturada<\/li>\n<li>No\u00e7\u00f5es b\u00e1sicas de programa\u00e7\u00e3o orientada a objetos em Python<\/li>\n<li>Conceito de <strong>classes <\/strong>e como utiliz\u00e1-las no Python<\/li>\n<li>O <strong>construtor <\/strong>de uma classe em Python<\/li>\n<li><strong>M\u00e9todos <\/strong>e <strong>atributos <\/strong>em Python<\/li>\n<li>Os quatro pilares do OOP<\/li>\n<li>Implementar <b>abstraction<\/b>,\u00a0<b>inheritance <\/b>e <strong>polimorfismo <\/strong>em um projeto<\/li>\n<\/ul>\n<p>Agora \u00e9 a sua vez!<\/p>\n<p>Se voc\u00ea gostou deste guia, confira nosso post nos <a href=\"https:\/\/kinsta.com\/pt\/blog\/tutoriais-python\/\">tutoriais Python<\/a>.<\/p>\n<p><em>Informe-nos sua solu\u00e7\u00e3o para o desafio abaixo nos coment\u00e1rios! E n\u00e3o se esque\u00e7a de conferir nosso <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-vs-python\/\">guia de compara\u00e7\u00e3o entre Python e PHP<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A programa\u00e7\u00e3o \u00e9 uma arte. E, como na arte, selecionar os pinc\u00e9is e tintas adequados \u00e9 essencial para produzir os melhores trabalhos. A Programa\u00e7\u00e3o orientada a &#8230;<\/p>\n","protected":false},"author":181,"featured_media":43442,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[270,477],"topic":[1001],"class_list":["post-43440","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>Um Guia para Iniciantes em Programa\u00e7\u00e3o Orientada a Objetos (POO) Python<\/title>\n<meta name=\"description\" content=\"Aprenda as entradas e sa\u00eddas da Programa\u00e7\u00e3o Python Orientada a Objetos (OOP). Vamos cobri-la desde o conceito at\u00e9 a implementa\u00e7\u00e3o com muitos exemplos.\" \/>\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\/pt\/blog\/programacao-orientada-objetos-python\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Um Guia para Iniciantes em Programa\u00e7\u00e3o Orientada a Objetos (POO) Python\" \/>\n<meta property=\"og:description\" content=\"Aprenda as entradas e sa\u00eddas da Programa\u00e7\u00e3o Python Orientada a Objetos (OOP). Vamos cobri-la desde o conceito at\u00e9 a implementa\u00e7\u00e3o com muitos exemplos.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-20T09:15:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T08:10:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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=\"Aprenda as entradas e sa\u00eddas da Programa\u00e7\u00e3o Python Orientada a Objetos (OOP). Vamos cobri-la desde o conceito at\u00e9 a implementa\u00e7\u00e3o com muitos exemplos.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/07\/python-object-oriented-programming.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@DaniDiazTech\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Diaz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/\"},\"author\":{\"name\":\"Daniel Diaz\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2\"},\"headline\":\"Um Guia para Iniciantes em Programa\u00e7\u00e3o Orientada a Objetos (POO) Python\",\"datePublished\":\"2021-07-20T09:15:54+00:00\",\"dateModified\":\"2023-08-22T08:10:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/\"},\"wordCount\":3822,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/07\/python-object-oriented-programming.jpeg\",\"keywords\":[\"programming\",\"python\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/\",\"name\":\"Um Guia para Iniciantes em Programa\u00e7\u00e3o Orientada a Objetos (POO) Python\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/07\/python-object-oriented-programming.jpeg\",\"datePublished\":\"2021-07-20T09:15:54+00:00\",\"dateModified\":\"2023-08-22T08:10:31+00:00\",\"description\":\"Aprenda as entradas e sa\u00eddas da Programa\u00e7\u00e3o Python Orientada a Objetos (OOP). Vamos cobri-la desde o conceito at\u00e9 a implementa\u00e7\u00e3o com muitos exemplos.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/07\/python-object-oriented-programming.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/07\/python-object-oriented-programming.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Um guia para iniciantes em programa\u00e7\u00e3o orientada a objetos Python (OOP)\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Um Guia para Iniciantes em Programa\u00e7\u00e3o Orientada a Objetos (POO) Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"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\/pt\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2\",\"name\":\"Daniel Diaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/danidiaztech\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Um Guia para Iniciantes em Programa\u00e7\u00e3o Orientada a Objetos (POO) Python","description":"Aprenda as entradas e sa\u00eddas da Programa\u00e7\u00e3o Python Orientada a Objetos (OOP). Vamos cobri-la desde o conceito at\u00e9 a implementa\u00e7\u00e3o com muitos exemplos.","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\/pt\/blog\/programacao-orientada-objetos-python\/","og_locale":"pt_PT","og_type":"article","og_title":"Um Guia para Iniciantes em Programa\u00e7\u00e3o Orientada a Objetos (POO) Python","og_description":"Aprenda as entradas e sa\u00eddas da Programa\u00e7\u00e3o Python Orientada a Objetos (OOP). Vamos cobri-la desde o conceito at\u00e9 a implementa\u00e7\u00e3o com muitos exemplos.","og_url":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2021-07-20T09:15:54+00:00","article_modified_time":"2023-08-22T08:10:31+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/07\/python-object-oriented-programming.jpeg","type":"image\/jpeg"}],"author":"Daniel Diaz","twitter_card":"summary_large_image","twitter_description":"Aprenda as entradas e sa\u00eddas da Programa\u00e7\u00e3o Python Orientada a Objetos (OOP). Vamos cobri-la desde o conceito at\u00e9 a implementa\u00e7\u00e3o com muitos exemplos.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/07\/python-object-oriented-programming.jpeg","twitter_creator":"@DaniDiazTech","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Daniel Diaz","Tempo estimado de leitura":"20 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/"},"author":{"name":"Daniel Diaz","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2"},"headline":"Um Guia para Iniciantes em Programa\u00e7\u00e3o Orientada a Objetos (POO) Python","datePublished":"2021-07-20T09:15:54+00:00","dateModified":"2023-08-22T08:10:31+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/"},"wordCount":3822,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/07\/python-object-oriented-programming.jpeg","keywords":["programming","python"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/","url":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/","name":"Um Guia para Iniciantes em Programa\u00e7\u00e3o Orientada a Objetos (POO) Python","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/07\/python-object-oriented-programming.jpeg","datePublished":"2021-07-20T09:15:54+00:00","dateModified":"2023-08-22T08:10:31+00:00","description":"Aprenda as entradas e sa\u00eddas da Programa\u00e7\u00e3o Python Orientada a Objetos (OOP). Vamos cobri-la desde o conceito at\u00e9 a implementa\u00e7\u00e3o com muitos exemplos.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/07\/python-object-oriented-programming.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/07\/python-object-oriented-programming.jpeg","width":1460,"height":730,"caption":"Um guia para iniciantes em programa\u00e7\u00e3o orientada a objetos Python (OOP)"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/kinsta.com\/pt\/topicos\/python\/"},{"@type":"ListItem","position":3,"name":"Um Guia para Iniciantes em Programa\u00e7\u00e3o Orientada a Objetos (POO) Python"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","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\/pt\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2","name":"Daniel Diaz","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/danidiaztech\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/43440","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/181"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=43440"}],"version-history":[{"count":9,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/43440\/revisions"}],"predecessor-version":[{"id":59800,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/43440\/revisions\/59800"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43440\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43440\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43440\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43440\/translations\/pt"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43440\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43440\/translations\/nl"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43440\/translations\/de"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43440\/translations\/se"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43440\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/43442"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=43440"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=43440"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=43440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}