SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
Repaso
              OOP en Python




  Curso de Introducción a Python
                           Clase 3


         Defossé Nahuel, Pecile Lautaro

                           UNPSJB


                    Septiembre 2012




Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso
                                               Tipos de datos inmutables
                            OOP en Python


Sintaxis de Python



      Python posee una sintaxis bastante flexible, por lo cual, a
      veces se pueden escribir onliners o código poco legible.
      Para esto existen herramientas de checkeo de sintaxis
        1   PEP8
        2   PyFlakes
        3   PyLint
      Todos son configurables sobre que puede ser considerado mal
      visto y están integrados en varias IDEs como Spyder, PyDev,
      Eric, PyCharm, vim-python, etc.




              Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso
                                              Tipos de datos inmutables
                           OOP en Python




Los tipo de datos inmutables son aquellos que no pueden cambiar
de valor a menos que se cree uno nuevo:
       str Cadena, ej: ”Hola mundo!”
       int y float Enteros ej: 42 0.3
       NoneType representa el vacío None
       bool solo existen dos instancias True y False
       tuple las tuplas son colecciones ordenadas de objetos, por
       ejemplo (1, 2, −2) ó ( Hola mundo , Python ) 1




   1
    Las tuplas además se usan para asignación múltiple y para retorno de
múltiple
             Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso
                                              Tipos de datos inmutables
                           OOP en Python


Tipos de datos mutables



      set Representa un conjunto, donde no se pueden repetir
      elementos.
      list Una lista contiene cualquier tipo de elementos y es
      dinámica. Ej: [ a , 1, 2]
      dict El diccionario es una tabla de asociación clave→valor.
      Ej:
      d = {’caballeros’:[’Arturo’, ’Lancelot’, ’Gallahad’],
           ’mosqueteros’:[’Aramis’, ’Athos’, ’Portos’]
           }




             Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                    OOP en Python      Metodos estáticos y de clase




En esta clase nos dedicaremos por enteros a OOP.
Refrescaremos conceptos ya vistos y conoceremos algunos
nuevos.




      Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                          OOP en Python      Metodos estáticos y de clase


Objetos




      Los objetos son la abstracción de Python para los datos.
      Todo dato en Python está representado por un objeto o alguna
      relación entre dos o más objetos.
      Todo objeto posee una identidad, un tipo y un valor.




            Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                           OOP en Python      Metodos estáticos y de clase


Identidad




       La identidad de un objeto nunca cambia una vez que ha sido
       creado.
       Para trabajar con la identidad, disponemos de la función id()
       y del operador is.
       Dos objetos diferentes pueden tener el mismo valor. Pero esto
       depende de la implementación de Python que estemos usando.




             Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                            OOP en Python      Metodos estáticos y de clase


Tipo




       El tipo de un objeto determina las operaciones que podemos
       realizar sobre este, y también define el conjunto de valores que
       puede adquirir.
       La función type() devuelve el tipo del objeto.




              Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                           OOP en Python      Metodos estáticos y de clase


Valor




   El valor de un objeto puede cambiar.
   Un objeto se denomina mutable o inmutable según cambie o no de
   valor respectivamente.
   La mutabilidad de un objeto queda definida por su tipo.




             Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                            OOP en Python      Metodos estáticos y de clase


Herencia Múltiple




   En Python, la herencia puede ser múltiple.
   En caso de que haya métodos con la misma signatura en los padres,
   tiene prioridad el perteneciente a la primera clase padre mencionada
   en la declaración de la clase hija.




              Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                          OOP en Python      Metodos estáticos y de clase


Polimorfismo




      Polimorfismo es la capacidad que tiene un método de saber
      actuar ante diferentes mensajes que puede recibir de otros
      objetos o de sí mismo.
      Duck-typing (tipado de pato): “si flota como pato y hace
      ’cuak!’ como un pato entonces es un pato”.




            Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                            OOP en Python      Metodos estáticos y de clase


Sobrecarga de operadores




   Python posee un conjunto especial de nombres de método que
   serán llamados ante determinados operadores o funciones que se
   apliquen sobre los objetos.
   Estos métodos especiales nos permiten personalizar el
   comportamiento del lenguage y ampliar de manera práctica las
   posiblidades del mismo.




              Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                            OOP en Python      Metodos estáticos y de clase


Propiedades
   En Python el acceso a los atributos tanto de una clase como de una
   instancia se hace con el operador punto .
   A veces es necesario controlar el acceso a ciertos atributos, por
   ejemplo
   from datetime import datetime

   class Persona(object):
       def __init__(self, nombre, nacimiento):
           self.nombre = nombre
           self.nacimiento = nacimiento

       def edad(self):
           ’’’Retorna la edad de la persona’’’
           return (datetime.today() -
                   self.nacimiento).days / 365
              Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                                OOP en Python      Metodos estáticos y de clase


Propiedaes


   Sería desable acceder a la edad como si se tratase de un atributo,
   aunque deba calcularse. Para esto podemos usar una propiedad 2 :

          @property
          def edad(self):
              ’’’Retorna la edad de la persona’’’
              return (datetime.today() - nacimiento) / 365
   De esta manera podemos hacer
   p = Persona("Eduardo", date(1976, 1, 4))
   p.edad # en vez de p.edad()


     2
         El caracter @ se usa para decorar código
                  Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                            OOP en Python      Metodos estáticos y de clase


Propiedades como getter/setter

   Las propiedades se comportan como los getters/setters de otros
   lenguajes y no es necesario cambiar la forma de acceso a los
   atributos!
   Supongamos que debemos controlar el valor con asignado a un
   atributo de una instancia, en este ejemplo no hay control sobre los
   valores:
   class PuntoGeo(object):
       def __init__(self, lat, lng):
           ’’’ Latitud y longitud ’’’
           self.lat = lat
           self.lng = lng
       def __str__(self):
           return "%.3f %.3f" % (self.lat, self.lng)

              Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                         OOP en Python      Metodos estáticos y de clase




Para definir el setter usamos el siguiente decorador:
     _lat = None
     @property
     def lat(self):
         return self._lat
     @lat.setter
     def lat(self, value):
         if not -90 <= value <= 90:
             raise ValueError("Valor fuera de rango"
                              ": %s" % value)
         self._lat = value
De esta manera accedemos al primer método como getter cuando
pedimos la latitud y al segundo cuando se la asignamos.
No es necesario usar setLat(valor)


           Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                          OOP en Python      Metodos estáticos y de clase


Métodos de clase




      En Python los atributos estáticos se definen con el decorador
      @classmethod , estos reciben la clase en vez de la instancia
      como su primer argumento.
      class A(object):
          @classmethod
          def metodo_de_clase(cls):
              print "No necesito ser instanciado"




            Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
Repaso      Objetos
                          OOP en Python      Metodos estáticos y de clase


Métodos estáticos



      Los métodos estáticos en Python son aquellos que no reciben
      nada como primer argumento. Se comportan como funciones
      bajo el ámbito de nombres de la clase.
      class B(object):
          @staticmethod
          def metodo_estatico():
              print "Soy una funcion comun "
                    "dentro de una clase"




            Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Cap%c3%8 dtulo+1+programacion+orientada+a+objetos
Cap%c3%8 dtulo+1+programacion+orientada+a+objetosCap%c3%8 dtulo+1+programacion+orientada+a+objetos
Cap%c3%8 dtulo+1+programacion+orientada+a+objetos
 
01 el lenguaje Python
01 el lenguaje Python01 el lenguaje Python
01 el lenguaje Python
 
Python básico I
Python básico IPython básico I
Python básico I
 
Python (Lenguaje de Programación)
Python (Lenguaje de Programación)Python (Lenguaje de Programación)
Python (Lenguaje de Programación)
 
Python 4
Python 4Python 4
Python 4
 
Python para principiantes
Python para principiantesPython para principiantes
Python para principiantes
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
Python i
Python iPython i
Python i
 
Python (ejercicios)
Python (ejercicios)Python (ejercicios)
Python (ejercicios)
 
Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)
 
Clase 4 JAVA 2012
Clase 4 JAVA 2012Clase 4 JAVA 2012
Clase 4 JAVA 2012
 
Python
PythonPython
Python
 
Introduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a ObjetosIntroduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a Objetos
 
Taller I Coreis Python 10112009
Taller I Coreis Python 10112009Taller I Coreis Python 10112009
Taller I Coreis Python 10112009
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
Java Sobrecarga y Recursividad
Java Sobrecarga y RecursividadJava Sobrecarga y Recursividad
Java Sobrecarga y Recursividad
 
Desarrollar un módulo para Visuse
Desarrollar un módulo para VisuseDesarrollar un módulo para Visuse
Desarrollar un módulo para Visuse
 
python programming learning
python programming learningpython programming learning
python programming learning
 
4 unidad polimorfismo
4 unidad polimorfismo4 unidad polimorfismo
4 unidad polimorfismo
 
Pycon es 17 noviembre 2014
Pycon es 17 noviembre 2014Pycon es 17 noviembre 2014
Pycon es 17 noviembre 2014
 

Destacado

Guía para subir videos a YouTube
Guía para subir videos a YouTubeGuía para subir videos a YouTube
Guía para subir videos a YouTubeSilvia Ruiz
 
Introducción a jQuery
Introducción a jQueryIntroducción a jQuery
Introducción a jQueryYeray Darias
 
English de lenguaje de programacion
English de lenguaje de programacionEnglish de lenguaje de programacion
English de lenguaje de programacionVillalba Griselda
 
Manual eGO iniciación rápida
Manual eGO iniciación rápidaManual eGO iniciación rápida
Manual eGO iniciación rápidaeGO Real Estate
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRJuan Belón Pérez
 
Introduccion al java script
Introduccion al java scriptIntroduccion al java script
Introduccion al java scriptRenny Batista
 

Destacado (7)

Guía para subir videos a YouTube
Guía para subir videos a YouTubeGuía para subir videos a YouTube
Guía para subir videos a YouTube
 
Introducción a jQuery
Introducción a jQueryIntroducción a jQuery
Introducción a jQuery
 
English de lenguaje de programacion
English de lenguaje de programacionEnglish de lenguaje de programacion
English de lenguaje de programacion
 
Manual eGO iniciación rápida
Manual eGO iniciación rápidaManual eGO iniciación rápida
Manual eGO iniciación rápida
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
 
Introduccion al java script
Introduccion al java scriptIntroduccion al java script
Introduccion al java script
 
Estrategias de lectura y los momentos del acto lector
Estrategias de lectura y los momentos del acto lectorEstrategias de lectura y los momentos del acto lector
Estrategias de lectura y los momentos del acto lector
 

Similar a Clase 3/4 Curso Introducción a Python 2012

Programacion Orientada a Objetos en python
Programacion Orientada a Objetos en pythonProgramacion Orientada a Objetos en python
Programacion Orientada a Objetos en pythonwozgeass
 
Python 3
Python 3Python 3
Python 3CHREAR
 
T02_RYAM_LÓPEZJARA_SALVATIERRANAVARRO_TEMASDEEEXPOSICCIÓN.pptx
T02_RYAM_LÓPEZJARA_SALVATIERRANAVARRO_TEMASDEEEXPOSICCIÓN.pptxT02_RYAM_LÓPEZJARA_SALVATIERRANAVARRO_TEMASDEEEXPOSICCIÓN.pptx
T02_RYAM_LÓPEZJARA_SALVATIERRANAVARRO_TEMASDEEEXPOSICCIÓN.pptxAdeliSNavarro
 
10. programación orientada a objetos (java)
10. programación orientada a objetos (java)10. programación orientada a objetos (java)
10. programación orientada a objetos (java)Eric Martinez Aguilar
 
De Cero A Python En 45 Min
De Cero A Python En 45 MinDe Cero A Python En 45 Min
De Cero A Python En 45 MinMarco Mansilla
 
Progra modulo iii-programacionpython02
Progra modulo iii-programacionpython02Progra modulo iii-programacionpython02
Progra modulo iii-programacionpython02Alma Lopez
 
Curso Java Inicial 4 Poo En Java
Curso Java Inicial   4 Poo En JavaCurso Java Inicial   4 Poo En Java
Curso Java Inicial 4 Poo En JavaEmilio Aviles Avila
 
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptxprogramacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptxFernando Espinoza Muñoz
 
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptxprogramacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptxFernando Espinoza Muñoz
 
Introducción a la programación orientada a objetos con JavaScript
Introducción a la programación orientada a objetos con JavaScriptIntroducción a la programación orientada a objetos con JavaScript
Introducción a la programación orientada a objetos con JavaScriptFrancisco Javier Arce Anguiano
 
Clase 1 - Programación orientada a Objetos (2).pptx
Clase 1 - Programación orientada a Objetos (2).pptxClase 1 - Programación orientada a Objetos (2).pptx
Clase 1 - Programación orientada a Objetos (2).pptxjavierccallo
 
La propiedad prototype en la programación orientada a objetos con JavaScript
La propiedad prototype en la programación orientada a objetos con JavaScriptLa propiedad prototype en la programación orientada a objetos con JavaScript
La propiedad prototype en la programación orientada a objetos con JavaScriptFrancisco Javier Arce Anguiano
 
Introduccion a la poo
Introduccion a la pooIntroduccion a la poo
Introduccion a la pooBoris Salleg
 

Similar a Clase 3/4 Curso Introducción a Python 2012 (20)

Programacion Orientada a Objetos en python
Programacion Orientada a Objetos en pythonProgramacion Orientada a Objetos en python
Programacion Orientada a Objetos en python
 
Python 3
Python 3Python 3
Python 3
 
Clase4_Python-CTIC
Clase4_Python-CTICClase4_Python-CTIC
Clase4_Python-CTIC
 
T02_RYAM_LÓPEZJARA_SALVATIERRANAVARRO_TEMASDEEEXPOSICCIÓN.pptx
T02_RYAM_LÓPEZJARA_SALVATIERRANAVARRO_TEMASDEEEXPOSICCIÓN.pptxT02_RYAM_LÓPEZJARA_SALVATIERRANAVARRO_TEMASDEEEXPOSICCIÓN.pptx
T02_RYAM_LÓPEZJARA_SALVATIERRANAVARRO_TEMASDEEEXPOSICCIÓN.pptx
 
poopython.pdf
poopython.pdfpoopython.pdf
poopython.pdf
 
10. programación orientada a objetos (java)
10. programación orientada a objetos (java)10. programación orientada a objetos (java)
10. programación orientada a objetos (java)
 
De Cero A Python En 45 Min
De Cero A Python En 45 MinDe Cero A Python En 45 Min
De Cero A Python En 45 Min
 
Poo
PooPoo
Poo
 
Progra modulo iii-programacionpython02
Progra modulo iii-programacionpython02Progra modulo iii-programacionpython02
Progra modulo iii-programacionpython02
 
Curso Java Inicial 4 Poo En Java
Curso Java Inicial   4 Poo En JavaCurso Java Inicial   4 Poo En Java
Curso Java Inicial 4 Poo En Java
 
Aprendizaje de Lenguaje de Programación Python
Aprendizaje de Lenguaje de Programación PythonAprendizaje de Lenguaje de Programación Python
Aprendizaje de Lenguaje de Programación Python
 
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptxprogramacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
 
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptxprogramacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
 
Introducción a la programación orientada a objetos con JavaScript
Introducción a la programación orientada a objetos con JavaScriptIntroducción a la programación orientada a objetos con JavaScript
Introducción a la programación orientada a objetos con JavaScript
 
Presentacion oop php5
Presentacion oop php5Presentacion oop php5
Presentacion oop php5
 
Guia poo php
Guia poo phpGuia poo php
Guia poo php
 
Clase 1 - Programación orientada a Objetos (2).pptx
Clase 1 - Programación orientada a Objetos (2).pptxClase 1 - Programación orientada a Objetos (2).pptx
Clase 1 - Programación orientada a Objetos (2).pptx
 
La propiedad prototype en la programación orientada a objetos con JavaScript
La propiedad prototype en la programación orientada a objetos con JavaScriptLa propiedad prototype en la programación orientada a objetos con JavaScript
La propiedad prototype en la programación orientada a objetos con JavaScript
 
Programacion de algoritmos
Programacion de algoritmosProgramacion de algoritmos
Programacion de algoritmos
 
Introduccion a la poo
Introduccion a la pooIntroduccion a la poo
Introduccion a la poo
 

Clase 3/4 Curso Introducción a Python 2012

  • 1. Repaso OOP en Python Curso de Introducción a Python Clase 3 Defossé Nahuel, Pecile Lautaro UNPSJB Septiembre 2012 Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 2. Repaso Tipos de datos inmutables OOP en Python Sintaxis de Python Python posee una sintaxis bastante flexible, por lo cual, a veces se pueden escribir onliners o código poco legible. Para esto existen herramientas de checkeo de sintaxis 1 PEP8 2 PyFlakes 3 PyLint Todos son configurables sobre que puede ser considerado mal visto y están integrados en varias IDEs como Spyder, PyDev, Eric, PyCharm, vim-python, etc. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 3. Repaso Tipos de datos inmutables OOP en Python Los tipo de datos inmutables son aquellos que no pueden cambiar de valor a menos que se cree uno nuevo: str Cadena, ej: ”Hola mundo!” int y float Enteros ej: 42 0.3 NoneType representa el vacío None bool solo existen dos instancias True y False tuple las tuplas son colecciones ordenadas de objetos, por ejemplo (1, 2, −2) ó ( Hola mundo , Python ) 1 1 Las tuplas además se usan para asignación múltiple y para retorno de múltiple Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 4. Repaso Tipos de datos inmutables OOP en Python Tipos de datos mutables set Representa un conjunto, donde no se pueden repetir elementos. list Una lista contiene cualquier tipo de elementos y es dinámica. Ej: [ a , 1, 2] dict El diccionario es una tabla de asociación clave→valor. Ej: d = {’caballeros’:[’Arturo’, ’Lancelot’, ’Gallahad’], ’mosqueteros’:[’Aramis’, ’Athos’, ’Portos’] } Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 5. Repaso Objetos OOP en Python Metodos estáticos y de clase En esta clase nos dedicaremos por enteros a OOP. Refrescaremos conceptos ya vistos y conoceremos algunos nuevos. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 6. Repaso Objetos OOP en Python Metodos estáticos y de clase Objetos Los objetos son la abstracción de Python para los datos. Todo dato en Python está representado por un objeto o alguna relación entre dos o más objetos. Todo objeto posee una identidad, un tipo y un valor. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 7. Repaso Objetos OOP en Python Metodos estáticos y de clase Identidad La identidad de un objeto nunca cambia una vez que ha sido creado. Para trabajar con la identidad, disponemos de la función id() y del operador is. Dos objetos diferentes pueden tener el mismo valor. Pero esto depende de la implementación de Python que estemos usando. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 8. Repaso Objetos OOP en Python Metodos estáticos y de clase Tipo El tipo de un objeto determina las operaciones que podemos realizar sobre este, y también define el conjunto de valores que puede adquirir. La función type() devuelve el tipo del objeto. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 9. Repaso Objetos OOP en Python Metodos estáticos y de clase Valor El valor de un objeto puede cambiar. Un objeto se denomina mutable o inmutable según cambie o no de valor respectivamente. La mutabilidad de un objeto queda definida por su tipo. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 10. Repaso Objetos OOP en Python Metodos estáticos y de clase Herencia Múltiple En Python, la herencia puede ser múltiple. En caso de que haya métodos con la misma signatura en los padres, tiene prioridad el perteneciente a la primera clase padre mencionada en la declaración de la clase hija. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 11. Repaso Objetos OOP en Python Metodos estáticos y de clase Polimorfismo Polimorfismo es la capacidad que tiene un método de saber actuar ante diferentes mensajes que puede recibir de otros objetos o de sí mismo. Duck-typing (tipado de pato): “si flota como pato y hace ’cuak!’ como un pato entonces es un pato”. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 12. Repaso Objetos OOP en Python Metodos estáticos y de clase Sobrecarga de operadores Python posee un conjunto especial de nombres de método que serán llamados ante determinados operadores o funciones que se apliquen sobre los objetos. Estos métodos especiales nos permiten personalizar el comportamiento del lenguage y ampliar de manera práctica las posiblidades del mismo. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 13. Repaso Objetos OOP en Python Metodos estáticos y de clase Propiedades En Python el acceso a los atributos tanto de una clase como de una instancia se hace con el operador punto . A veces es necesario controlar el acceso a ciertos atributos, por ejemplo from datetime import datetime class Persona(object): def __init__(self, nombre, nacimiento): self.nombre = nombre self.nacimiento = nacimiento def edad(self): ’’’Retorna la edad de la persona’’’ return (datetime.today() - self.nacimiento).days / 365 Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 14. Repaso Objetos OOP en Python Metodos estáticos y de clase Propiedaes Sería desable acceder a la edad como si se tratase de un atributo, aunque deba calcularse. Para esto podemos usar una propiedad 2 : @property def edad(self): ’’’Retorna la edad de la persona’’’ return (datetime.today() - nacimiento) / 365 De esta manera podemos hacer p = Persona("Eduardo", date(1976, 1, 4)) p.edad # en vez de p.edad() 2 El caracter @ se usa para decorar código Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 15. Repaso Objetos OOP en Python Metodos estáticos y de clase Propiedades como getter/setter Las propiedades se comportan como los getters/setters de otros lenguajes y no es necesario cambiar la forma de acceso a los atributos! Supongamos que debemos controlar el valor con asignado a un atributo de una instancia, en este ejemplo no hay control sobre los valores: class PuntoGeo(object): def __init__(self, lat, lng): ’’’ Latitud y longitud ’’’ self.lat = lat self.lng = lng def __str__(self): return "%.3f %.3f" % (self.lat, self.lng) Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 16. Repaso Objetos OOP en Python Metodos estáticos y de clase Para definir el setter usamos el siguiente decorador: _lat = None @property def lat(self): return self._lat @lat.setter def lat(self, value): if not -90 <= value <= 90: raise ValueError("Valor fuera de rango" ": %s" % value) self._lat = value De esta manera accedemos al primer método como getter cuando pedimos la latitud y al segundo cuando se la asignamos. No es necesario usar setLat(valor) Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 17. Repaso Objetos OOP en Python Metodos estáticos y de clase Métodos de clase En Python los atributos estáticos se definen con el decorador @classmethod , estos reciben la clase en vez de la instancia como su primer argumento. class A(object): @classmethod def metodo_de_clase(cls): print "No necesito ser instanciado" Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 18. Repaso Objetos OOP en Python Metodos estáticos y de clase Métodos estáticos Los métodos estáticos en Python son aquellos que no reciben nada como primer argumento. Se comportan como funciones bajo el ámbito de nombres de la clase. class B(object): @staticmethod def metodo_estatico(): print "Soy una funcion comun " "dentro de una clase" Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python