Skip to content

Instantly share code, notes, and snippets.

@edcrypt
Created January 23, 2019 20:07
Show Gist options
  • Save edcrypt/b93eb5df2811296519b562844ca84c16 to your computer and use it in GitHub Desktop.
Save edcrypt/b93eb5df2811296519b562844ca84c16 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Até agora nós só criamos funções. Elas são ótimas para processar dados e retornar resultados, mas não tanto para fazer simulações. Para isso, vamos usar *orientação a objetos*.\n",
"\n",
"Objetos tem algo que conhecem e algo que sabem fazer. Para fazer algo, eles precisam conversar com outros objetos."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Uma *classe* é um objeto para criar objetos -- uma especie de \"molde\".\n",
"\n",
"Nesse exemplo, `Person` representa a *ideia* de uma pessoa, com tudo que ela pode saber ou fazer, mas não uma pessoa concreta."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from datetime import date\n",
"\n",
"class Person:\n",
" \"\"\" I'm a human person.\n",
" I know my name and birthday, and how to calculate my own age in years.\n",
" \"\"\"\n",
" \n",
" def __init__(self, name, birthday):\n",
" self.name = name\n",
" self.birthday = birthday\n",
" \n",
" def first_name(self):\n",
" return self.name.split()[0]\n",
"\n",
" def age(self):\n",
" return NotImplemented\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Para usar nosso novo tipo, vamos criar uma *instancia* -- uma espécia de \"materialização\" da nossa pessoa conceitual."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"me = Person('Eduardo Padoan', date(1984, 10, 2))\n",
"\n",
"assert me.first_name() == 'Eduardo'\n",
"assert me.age == 35"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Um exemplo mais útil seria um cadastro de funcionários. \n",
"Mas um funcionário compartilha conceitos com `Person`, certo?\n",
"Para evitar repetições, podemos usar o conceito de *especialização* -- para isso temos a funcionalidade de **herança**:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"class Employee(Person):\n",
" \"\"\"I'm an employee of a company.\n",
" I know a person details and their function and salary.\n",
" \"\"\"\n",
" \n",
" def __init__(self, name, birthday, email, phone):\n",
" super().__init__(name, birthday)\n",
" self.email = email\n",
" self.phone = phone"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"class Account:\n",
" \"\"\" I represent a banking account.\n",
" I know the balance and who I belong to.\n",
" \"\"\"\n",
" def __init__(self, balance, owner):\n",
" self.balance = balance\n",
" self.owner = owner\n",
" \n",
" def deposit(self, amount):\n",
" return NotImplemented\n",
" \n",
" def withdraw(self, amount):\n",
" return NotImplemented"
]
}
],
"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.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@edcrypt
Copy link
Author

edcrypt commented Jan 30, 2019

Alguns erros foram deixados de propósito para que corrigíssemos durante a aula.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment