{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Atributos y métodos de clase\n",
    "- **Atributos**: Hacen referencia a las **variables** internas de la clase.\n",
    "- **Métodos**: Hacen referencia a las **funciones** internas de la clase."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Galleta:\n",
    "    pass\n",
    "\n",
    "una_galleta = Galleta()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Definición de atributos dinámicos en los objetos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "una_galleta.sabor = \"Salado\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "una_galleta.color = \"Marrón\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "El sabor de esta galleta es Salado\n"
     ]
    }
   ],
   "source": [
    "print(\"El sabor de esta galleta es\",una_galleta.sabor)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Definición de atributos en la clase"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "class Galleta:\n",
    "    chocolate = False\n",
    "\n",
    "g = Galleta()\n",
    "g.chocolate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g.chocolate = True\n",
    "g.chocolate"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Método __init__()\n",
    "Se llama automáticamente al crear una instancia de clase."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Se acaba de crear una galleta.\n"
     ]
    }
   ],
   "source": [
    "class Galleta():\n",
    "    chocolate = False\n",
    "    def __init__(self):\n",
    "        print(\"Se acaba de crear una galleta.\")\n",
    "g = Galleta()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Métodos y la palabra self\n",
    "Self sirve para hacer referencia a los métodos y atributos base de una clase dentro de sus propios métodos."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Se acaba de crear una galleta.\n",
      "Soy una galleta sin chocolate :-(\n",
      "Soy una galleta chocolateada :-D\n"
     ]
    }
   ],
   "source": [
    "class Galleta():\n",
    "    chocolate = False\n",
    "    \n",
    "    def __init__(self):\n",
    "        print(\"Se acaba de crear una galleta.\")\n",
    "    \n",
    "    def chocolatear(self):\n",
    "        self.chocolate = True\n",
    "        \n",
    "    def tiene_chocolate(self):\n",
    "        if (self.chocolate):\n",
    "            print(\"Soy una galleta chocolateada :-D\")\n",
    "        else:\n",
    "            print(\"Soy una galleta sin chocolate :-(\")\n",
    "    \n",
    "g = Galleta()\n",
    "g.tiene_chocolate()\n",
    "g.chocolatear()\n",
    "g.tiene_chocolate()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Parámetros en el __init__ (argumentos al instanciar)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Galleta():\n",
    "    chocolate = False\n",
    "    \n",
    "    def __init__(self, sabor, forma):\n",
    "        self.sabor = sabor\n",
    "        self.forma = forma\n",
    "        print(\"Se acaba de crear una galleta {} y {}\".format(sabor,forma))\n",
    "    \n",
    "    def chocolatear(self):\n",
    "        self.chocolate = True\n",
    "        \n",
    "    def tiene_chocolate(self):\n",
    "        if (self.chocolate):\n",
    "            print(\"Soy una galleta chocolateada :-D\")\n",
    "        else:\n",
    "            print(\"Soy una galleta sin chocolate :-(\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Se acaba de crear una galleta salada y cuadrada\n"
     ]
    }
   ],
   "source": [
    "g = Galleta(\"salada\",\"cuadrada\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Parámetros con valores por defecto en el __init__()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "__init__() missing 2 required positional arguments: 'sabor' and 'color'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-20-bfd19da23fef>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mg\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mGalleta\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m: __init__() missing 2 required positional arguments: 'sabor' and 'color'"
     ]
    }
   ],
   "source": [
    "g = Galleta()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Galleta():\n",
    "    chocolate = False\n",
    "    \n",
    "    def __init__(self, sabor=None, forma=None):\n",
    "        self.sabor = sabor\n",
    "        self.forma = forma\n",
    "        if sabor is not None and forma is not None:\n",
    "            print(\"Se acaba de crear una galleta {} y {}\".format(sabor,forma))\n",
    "    \n",
    "    def chocolatear(self):\n",
    "        self.chocolate = True\n",
    "        \n",
    "    def tiene_chocolate(self):\n",
    "        if (self.chocolate):\n",
    "            print(\"Soy una galleta chocolateada :-D\")\n",
    "        else:\n",
    "            print(\"Soy una galleta sin chocolate :-(\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Se acaba de crear una galleta salada y cuadrada\n"
     ]
    }
   ],
   "source": [
    "g = Galleta(\"salada\",\"cuadrada\")"
   ]
  }
 ],
 "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.5.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
