teslariu

metodos de clase

Sep 26th, 2022
965
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.84 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # metodos de clase, metodos estaticos, metodos regulares
  5.  
  6. # Escribamos una clase con los tres tipos de métodos
  7. # EN PYTHON LOS METODOS DE CLASE NO SON IGUALES A LOS METODOS ESTATICOS
  8. '''
  9. class MiClase():
  10.    def metodo(self):
  11.        """Instancia de método REGULAR. A través de self podemos
  12.        acceder a los atributos y otros métodos del objeto. Podemos
  13.        acceder también a la clase misma mediante self.__class__ y modificar
  14.        el estado de la clase"""
  15.        return f"Instancia del método '{self}'"
  16.        
  17.    @classmethod
  18.    def metodo_de_clase(cls):
  19.        """Toma un parámetro cls que apunta a la clase y no a la instancia
  20.        del objeto cuando es llamado. No puede modificar el estado de una
  21.        instancia de la clase en particular, modifica solo el estado de
  22.        una clase"""
  23.        return f"Método de clase '{cls}'"
  24.  
  25.  
  26.    @staticmethod
  27.    def metodo_estatico():
  28.        """Acepta cualquier cantidad de parámetros excepto self y cls
  29.        no puede modificar el estado de un objeto ni el de una clase
  30.        Están restringidos y representan una forma de namespace de métodos"""
  31.        return "Método estático"
  32.        
  33. # creo un objeto
  34. objeto = MiClase()
  35.  
  36. # llamo al método regular
  37. print(objeto.metodo())
  38.  
  39. # llamo al método de clase
  40. print(objeto.metodo_de_clase())
  41.  
  42. # llamo al método estático
  43. print(objeto.metodo_estatico())
  44.  
  45. # borremos el objeto y llamemos a los métodos
  46. del objeto
  47.  
  48.  
  49. print(MiClase.metodo_de_clase())
  50. print(MiClase.metodo_estatico())
  51. print(objeto.metodo())
  52.  
  53. ###### Ejemplo ################
  54.  
  55. class Pizza:
  56.    def __init__(self, ingredientes):
  57.        self.ingredientes = ingredientes
  58.        
  59.    def __repr__(self):
  60.        return f"Pizza({self.ingredientes!r})"
  61.        
  62.    @classmethod
  63.    def margarita(cls):
  64.        return cls(['muzzarella', 'tomates'])
  65.        
  66.    @classmethod
  67.    def napolitana(cls):
  68.        return cls(['ajo', 'oregano', 'muzzarella', 'tomates'])
  69.        
  70. print(Pizza.margarita())
  71. print(Pizza.napolitana())
  72.  
  73. '''
  74. # amplio con un método estático
  75. class Pizza:
  76.     def __init__(self, radio, ingredientes):
  77.         self.radio = radio
  78.         self.ingredientes = ingredientes
  79.        
  80.     def __repr__(self):
  81.         return f"Pizza({self.radio}, {self.ingredientes!r})"
  82.        
  83.     def area(self):
  84.         return self.area_circulo(self.radio)
  85.        
  86.     @staticmethod
  87.     def area_circulo(r):
  88.         """No puede acceder a clase ni instancia, cls ni self son
  89.        metodos independientes"""
  90.         return r**2 * 3.1416
  91.    
  92. p = Pizza(4, ["muzza", "tomate"])
  93. print(p)
  94.  
  95. print("Area como método ordinario (accede al atributo radio)")
  96. print(p.area())
  97.  
  98. print("Area como método estàtico (no accede al atributo radio)")
  99. print(Pizza.area_circulo(4))
  100.        
Advertisement
Add Comment
Please, Sign In to add comment