Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- # metodos de clase, metodos estaticos, metodos regulares
- # Escribamos una clase con los tres tipos de métodos
- # EN PYTHON LOS METODOS DE CLASE NO SON IGUALES A LOS METODOS ESTATICOS
- '''
- class MiClase():
- def metodo(self):
- """Instancia de método REGULAR. A través de self podemos
- acceder a los atributos y otros métodos del objeto. Podemos
- acceder también a la clase misma mediante self.__class__ y modificar
- el estado de la clase"""
- return f"Instancia del método '{self}'"
- @classmethod
- def metodo_de_clase(cls):
- """Toma un parámetro cls que apunta a la clase y no a la instancia
- del objeto cuando es llamado. No puede modificar el estado de una
- instancia de la clase en particular, modifica solo el estado de
- una clase"""
- return f"Método de clase '{cls}'"
- @staticmethod
- def metodo_estatico():
- """Acepta cualquier cantidad de parámetros excepto self y cls
- no puede modificar el estado de un objeto ni el de una clase
- Están restringidos y representan una forma de namespace de métodos"""
- return "Método estático"
- # creo un objeto
- objeto = MiClase()
- # llamo al método regular
- print(objeto.metodo())
- # llamo al método de clase
- print(objeto.metodo_de_clase())
- # llamo al método estático
- print(objeto.metodo_estatico())
- # borremos el objeto y llamemos a los métodos
- del objeto
- print(MiClase.metodo_de_clase())
- print(MiClase.metodo_estatico())
- print(objeto.metodo())
- ###### Ejemplo ################
- class Pizza:
- def __init__(self, ingredientes):
- self.ingredientes = ingredientes
- def __repr__(self):
- return f"Pizza({self.ingredientes!r})"
- @classmethod
- def margarita(cls):
- return cls(['muzzarella', 'tomates'])
- @classmethod
- def napolitana(cls):
- return cls(['ajo', 'oregano', 'muzzarella', 'tomates'])
- print(Pizza.margarita())
- print(Pizza.napolitana())
- '''
- # amplio con un método estático
- class Pizza:
- def __init__(self, radio, ingredientes):
- self.radio = radio
- self.ingredientes = ingredientes
- def __repr__(self):
- return f"Pizza({self.radio}, {self.ingredientes!r})"
- def area(self):
- return self.area_circulo(self.radio)
- @staticmethod
- def area_circulo(r):
- """No puede acceder a clase ni instancia, cls ni self son
- metodos independientes"""
- return r**2 * 3.1416
- p = Pizza(4, ["muzza", "tomate"])
- print(p)
- print("Area como método ordinario (accede al atributo radio)")
- print(p.area())
- print("Area como método estàtico (no accede al atributo radio)")
- print(Pizza.area_circulo(4))
Advertisement
Add Comment
Please, Sign In to add comment