Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- # sin tsdfcsfítulo.py
- # metodos magicos o dunder methods
- # __len__ <-- len()
- # __str__ <-- print()
- # __add__ <-- +
- # __getitem__(i) <-- lista[i]
- """
- class Perro:
- # atributo de clase
- especie = "Canis familiaris"
- def __init__(self, nombre,edad):
- self.nombre = nombre
- self.edad = edad
- def __len__(self):
- return self.edad
- # def descripcion(self):
- # return f"{self.nombre} tiene {self.edad} años"
- def __str__(self):
- return f"{self.nombre} tiene {self.edad} años"
- def __add__(self1, self2):
- return f"{self1.nombre} y {self2.nombre} van a tener cachorritos"
- sultan = Perro("Sultan",6)
- firulai = Perro("Firulai",4)
- print(sultan.nombre)
- sultan.especie = "marca perro"
- print(sultan.especie)
- print(firulai.especie)
- print(firulai)
- print(firulai + sultan)
- print(len(sultan))
- class Vector:
- def __init__(self,x,y):
- self.x = x
- self.y = y
- def __abs__(self):
- return (self.x**2 + self.y**2)**0.5
- def __str__(self):
- return f"({self.x},{self.y})"
- def __repr__(self):
- return f"Vector de coordenadas x={self.x}, y={self.y}"
- v = Vector(3,4)
- print(abs(v))
- print(v)
- print(repr(v))
- """
- '''
- # metodos de clases, metodos estaticos, metodos regulares
- class MiClase:
- def metodo(self):
- """Metodo de instancia regular. A través de self podemos acceder
- a los atributos y otros metodos del objeto. Podemos acceder a
- la clase mediante self.__class__ y modificar el estado de la clase"""
- return "Metodo regular"
- @classmethod
- def metodo_de_clase(cls):
- """ Toma un parametro cls que apunta a la clase y no a la instancia
- como en el caso de self. NO PUEDE MODIFICAR EL ESTADO DE UNA INSTANCIA,
- MODIFICA EL ESTADO DE LA CLASE"""
- return f"Método de clase '{cls}'"
- @staticmethod
- def metodo_estatico():
- """ Acepta cualquier cantidad de parametros EXCEPTO cls y self
- No pueden modificar el estado de un objeto ni el de una clase
- estan restringidos y representan una forma de NAMESPACE de sus métodos"""
- return "Metodo estatico"
- objeto = MiClase()
- print(objeto.metodo_de_clase())
- print(objeto.metodo_estatico())
- print(objeto.metodo())
- print(MiClase.metodo(objeto))
- # repitamos pero sin instancias
- del(objeto)
- print(MiClase.metodo_de_clase())
- print(MiClase.metodo_estatico())
- print(objeto.metodo()) # da error, no hay self (no hay instancia)
- '''
- ############# EJEMPLO #####################
- class Pizza:
- def __init__(self, ingredientes):
- self.ingredientes = ingredientes
- def __repr__(self):
- return f"Pizza({self.ingredientes})"
- def area(self):
- return self.area_circulo(self.radio)
- @classmethod
- def margarita(cls):
- return cls(["muzzarella", "tomates","ajo"])
- @classmethod
- def napolitana(cls):
- return cls(["muzzarella", "tomates","ajo", "oregano"])
- '''
- @staticmethod
- def area_circulo(r):
- """Este metodo estatico no accede a clases ni instancias, son
- metodos independientes"""
- from math import pi
- return pi * r**2
- '''
- p = Pizza(["muzza","jamon","anana"])
- print(p)
- print(Pizza.margarita())
- print(Pizza.napolitana())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement