{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "FGV - EMAp - Escola de Matemática Aplicada\n", "==\n", "Introdução à Programação com a Linguagem Python\n", "--" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Classes" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class Inutil:\n", " pass" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Inutil" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dir(Inutil)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "alguma_instancia = Inutil()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "type(alguma_instancia)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "alguma_instancia" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class MyClass:\n", " \"\"\"\n", " Aqui eu vou colocar\n", " uma string que define as\n", " principais informações sobre\n", " a classe que estou criando\n", " \"\"\"\n", " \n", " atributo_da_classe = 1234\n", " outro_atributo = 5678\n", " \n", " def metodo_da_classe(self):\n", " return 'Olá povo!'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = MyClass()\n", "y = MyClass()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x.atributo_da_classe" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x.outro_atributo" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x.metodo_da_classe" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x.metodo_da_classe()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x.atributo_da_classe" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x.atributo_da_classe = 4321" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x.atributo_da_classe" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "y.atributo_da_classe" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x.atributo_da_classe" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x.novo_atributo = \"qualquer coisa nova\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "type(x)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dir(x)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "z = MyClass()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dir(z)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class MyComplex:\n", " def __init__(self, realpart, imagpart):\n", " self.r = realpart\n", " self.i = imagpart" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "z = MyComplex(2,-4)\n", "j = MyComplex(13,12)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "z.r" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "z.i" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "z.novo_atributo = 'uma nova coisa'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "z.novo_atributo" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dir(j)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class Retangulo:\n", " def inverte(self):\n", " self.largura, self.comprimento = self.comprimento, self.largura\n", " \n", " def __init__(self, ladoa, ladob):\n", " self.comprimento = ladoa\n", " self.largura = ladob\n", " self.area = ladoa * ladob\n", " self.perimetro = 2 * (ladoa+ladob)\n", " if self.largura > self.comprimento:\n", " self.inverte()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meu_retangulo = Retangulo(10,50)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meu_retangulo.area" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meu_retangulo.largura" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meu_retangulo.comprimento" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meu_retangulo.inverte()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meu_retangulo.comprimento" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meu_retangulo.largura" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dir(meu_retangulo)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meu_retangulo.__repr__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(meu_retangulo)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class Triangulo:\n", " def __init__(self,lado1,lado2,lado3):\n", " self.lado1 = lado1\n", " self.lado2 = lado2\n", " self.lado3 = lado3\n", " self.tipo()\n", " \n", " def __repr__(self):\n", " return \"Triangulo nas paradas\"\n", " \n", " def tipo(self):\n", " if self.lado1 == self.lado2 and self.lado1 == self.lado3:\n", " print('equilátero')\n", " self.tipo = 'equilátero'\n", " elif self.lado1 == self.lado2 or \\\n", " self.lado1 == self.lado3 or \\\n", " self.lado2 == self.lado3:\n", " print('isósceles')\n", " self.tipo = 'isósceles'\n", " else:\n", " print('escaleno')\n", " self.tipo = 'escaleno'\n", " " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tri = Triangulo(5,5,5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tri.tipo" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tri.lado1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(tri)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class NovaClasse:\n", " prop1 = 'texto'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = NovaClasse()\n", "y = NovaClasse\n", "print(type(x))\n", "print(type(y))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(x.prop1)\n", "x.prop1 = 'Mudei'\n", "print(x.prop1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = NovaClasse()\n", "a.prop1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "y.prop1 = 'mudei definitivamente'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "b = NovaClasse()\n", "b.prop1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x.prop1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "NovaClasse.prop1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x.prop1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a.prop1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "c = y()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "c.prop1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dir(NovaClasse)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class Dog:\n", " def __init__(self, name, raca='vira lata'):\n", " self.name = name\n", " self.raca = raca\n", " self.tricks = []\n", "\n", " def add_trick(self, trick):\n", " if not trick in self.tricks:\n", " self.tricks.append(trick)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "d = Dog('Fido','Pastor Alemao')\n", "e = Dog('Buddy','Cocker')\n", "f = Dog('Rex')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "d.name" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f.raca" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "d.add_trick('Rolar')\n", "e.add_trick('Fingir-se de morto')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "d.tricks" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "d.add_trick('Pedir Comida')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "d.name" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "d.raca" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "d.tricks" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "e.tricks" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f = Dog('Rex','Doberman')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f.name" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f.raca" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f.add_trick('Latir para ladroes')\n", "f.tricks" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import time\n", "class SuperDog(Dog):\n", " \n", " def __init__(self, name, raca):\n", " Dog.__init__(self, name, raca)\n", " self.comida = False\n", " self.adestrado = False\n", " self.ultima_refeicao = time.time()\n", " \n", " \n", " def esta_com_fome(self):\n", " if time.time() - self.ultima_refeicao < 5:\n", " print('Não')\n", " else:\n", " print('Sim, a última refeição foi')\n", " print('há {:.2f} min'.format((time.time() - self.ultima_refeicao)/60))\n", " \n", " def adestra(self):\n", " self.adestrado = True\n", " \n", " def alimenta(self):\n", " self.ultima_refeicao = time.time()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f = SuperDog('Raghu','Labrador')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f.esta_com_fome()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f.esta_com_fome()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f.alimenta()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f.esta_com_fome()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f.tricks" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f.adestrado" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f.adestra()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f.adestrado" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Fibo como um generator \n", "http://www.diveintopython3.net/iterators.html " ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [], "source": [ "class Fib:\n", " '''iterator that yields numbers in the Fibonacci sequence'''\n", "\n", " def __init__(self, maximo):\n", " self.max = maximo\n", " #self.a = 0\n", " #self.b = 1\n", "\n", " def __iter__(self):\n", " self.a = 0\n", " self.b = 1\n", " return self\n", "\n", " def __next__(self):\n", " fib = self.a\n", " if fib > self.max:\n", " raise StopIteration\n", " self.a, self.b = self.b, self.a + self.b\n", " return fib" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [], "source": [ "f = Fib(30)" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "iter(f)\n", "f.__next__()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for valor in f:\n", " print(valor)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "class Aleatorio:\n", " def __init__(self, maximo):\n", " self.max = maximo\n", " \n", " def __iter__(self):\n", " self.count = 0\n", " return self\n", "\n", " def __next__(self):\n", " self.count += 1\n", " valor = random.random()\n", " if valor > 0.95 or valor < 0.05 or self.count > self.max:\n", " raise StopIteration\n", " return valor" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['__class__',\n", " '__delattr__',\n", " '__dict__',\n", " '__dir__',\n", " '__doc__',\n", " '__eq__',\n", " '__format__',\n", " '__ge__',\n", " '__getattribute__',\n", " '__gt__',\n", " '__hash__',\n", " '__init__',\n", " '__iter__',\n", " '__le__',\n", " '__lt__',\n", " '__module__',\n", " '__ne__',\n", " '__new__',\n", " '__next__',\n", " '__reduce__',\n", " '__reduce_ex__',\n", " '__repr__',\n", " '__setattr__',\n", " '__sizeof__',\n", " '__str__',\n", " '__subclasshook__',\n", " '__weakref__']" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dir(Aleatorio)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "import random\n", "x = Aleatorio(30)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0757647989497191\n", "0.4874782063908957\n", "0.48055175657811267\n", "0.9446365370585144\n", "0.18936611639572887\n", "0.6606273511695889\n", "0.9446756864737489\n", "0.9461789308049692\n" ] } ], "source": [ "for valor in x:\n", " print(valor)" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "class MyInteger(int):\n", " #def __init__(self, valor):\n", " # self = valor\n", " \n", " def __add__(self,outro):\n", " return self * outro" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "a = MyInteger(2)\n", "b = MyInteger(5)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "10" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a + b" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "10" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a * b" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on wrapper_descriptor:\n", "\n", "__mul__(self, value, /)\n", " Return self*value.\n", "\n" ] } ], "source": [ "help(MyInteger.__mul__)" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [], "source": [ "class MyDict(dict):\n", " pass" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [], "source": [ "z = MyList([1,2,3,4])" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on method-wrapper object:\n", "\n", "__init__ = class method-wrapper(object)\n", " | Methods defined here:\n", " | \n", " | __call__(self, /, *args, **kwargs)\n", " | Call self as a function.\n", " | \n", " | __eq__(self, value, /)\n", " | Return self==value.\n", " | \n", " | __ge__(self, value, /)\n", " | Return self>=value.\n", " | \n", " | __getattribute__(self, name, /)\n", " | Return getattr(self, name).\n", " | \n", " | __gt__(self, value, /)\n", " | Return self>value.\n", " | \n", " | __hash__(self, /)\n", " | Return hash(self).\n", " | \n", " | __le__(self, value, /)\n", " | Return self<=value.\n", " | \n", " | __lt__(self, value, /)\n", " | Return self O modelo do Automovel \n", "- Autonomia (método) --> Deve retornar quantos km ele pode andar \n", "- Nível do tanque (método e atributo) --> Deve retornar o número de litros do tanque \n", "- Capacidade do tanque (Atributo) --> Quantidade de litros do tanque \"cheio\", capacidade máxima \n", "- Consumo (atributo) --> Um valor representando o consumo em km por litro \n", "- Abastece (método) --> Acrescenta um numero de litros de combustível ao tanque, até, no máximo, sua capacidade \n", "- Anda (método) --> Faz o automóvel andar um número específico de km \n", "- Odometro --> (atributo) Retorna o número total de km andados \n", "- Odometro parcial (atributo) --> Retorna o número de km andados desde o ultimo abastecimento " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class Auto:\n", " def __init__(self, modelo, consumo, capacidade_tanque):\n", " self.modelo = modelo\n", " self.consumo = consumo\n", " self.capacidade_tanque = capacidade_tanque\n", " self.odometro = 0\n", " self.odometro_parcial = 0\n", " self.combustivel = 0\n", " \n", " def anda(self,km):\n", " if km/self.consumo < self.combustivel:\n", " self.combustivel -= (km/self.consumo)\n", " self.odometro += km\n", " self.odometro_parcial += km\n", " else:\n", " print('Você só pode andar {0:.2f} Km'.format(self.autonomia()))\n", "\n", " def abastece(self, litros):\n", " self.falta = self.capacidade_tanque - self.combustivel\n", " if litros > self.falta:\n", " print('Você só pode abastecer {0:.2f} litros'.format(self.falta))\n", " else:\n", " self.odometro_parcial = 0\n", " self.combustivel += litros\n", " print('Abastecemos {0:.2f} litros'.format(litros))\n", " print('Tanque possui {0:.2f} litros'.format(self.combustivel))\n", "\n", " def autonomia(self):\n", " self.atnm = self.combustivel*self.consumo\n", " print('A autonomia é de {0:.2f} Km'.format(self.atnm))\n", " return self.atnm\n", " \n", " def nivel_tanque(self):\n", " print('O tanque contém {0:.2f} litros'.format(self.combustivel))\n", " \n", " def mostra_odometro(self):\n", " print('Odômetro parcial: {0:.2f}'.format(self.odometro_parcial))\n", " print('Odômetro total: {0:.2f}'.format(self.odometro))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meucarro = Auto('Nissam',9,40)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meucarro.anda(240)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meucarro.abastece(20)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meucarro.autonomia()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meucarro.anda(240)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meucarro.anda(100)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meucarro.mostra_odometro()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meucarro.abastece(20)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meucarro.autonomia()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "meucarro.mostra_odometro()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }