Advertisement
teslariu

mas clases

Sep 27th, 2023
912
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.17 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. #  sin tsdfcsfítulo.py
  5.  
  6. # metodos magicos o dunder methods
  7. # __len__  <-- len()
  8. # __str__ <-- print()
  9. # __add__  <-- +
  10. # __getitem__(i) <-- lista[i]
  11.  
  12. """
  13.  
  14. class Perro:
  15.     # atributo de clase
  16.     especie = "Canis familiaris"
  17.    
  18.     def __init__(self, nombre,edad):
  19.         self.nombre = nombre
  20.         self.edad = edad
  21.        
  22.     def __len__(self):
  23.         return self.edad
  24.  
  25.     # def descripcion(self):
  26.     #   return f"{self.nombre} tiene {self.edad} años"
  27.  
  28.     def  __str__(self):
  29.         return f"{self.nombre} tiene {self.edad} años"
  30.        
  31.     def  __add__(self1, self2):
  32.         return f"{self1.nombre} y {self2.nombre} van a tener cachorritos"
  33.    
  34.  
  35.        
  36.    
  37. sultan = Perro("Sultan",6)
  38. firulai = Perro("Firulai",4)
  39.  
  40. print(sultan.nombre)
  41.  
  42. sultan.especie = "marca perro"
  43.  
  44. print(sultan.especie)
  45. print(firulai.especie)
  46.  
  47. print(firulai)
  48. print(firulai + sultan)
  49.  
  50. print(len(sultan))
  51.  
  52.  
  53. class Vector:
  54.     def __init__(self,x,y):
  55.         self.x = x
  56.         self.y = y
  57.        
  58.     def __abs__(self):
  59.         return (self.x**2 + self.y**2)**0.5
  60.        
  61.     def __str__(self):
  62.         return f"({self.x},{self.y})"
  63.  
  64.     def __repr__(self):
  65.         return f"Vector de coordenadas x={self.x}, y={self.y}"
  66.        
  67. v = Vector(3,4)
  68. print(abs(v))
  69. print(v)
  70. print(repr(v))
  71.  
  72. """
  73. '''
  74. # metodos de clases, metodos estaticos, metodos regulares
  75.  
  76. class MiClase:
  77.     def metodo(self):
  78.         """Metodo de instancia regular. A través de self podemos acceder
  79.         a los atributos y otros metodos del objeto. Podemos acceder a
  80.         la clase mediante self.__class__ y modificar el estado de la clase"""
  81.         return "Metodo regular"
  82.        
  83.     @classmethod
  84.     def metodo_de_clase(cls):
  85.         """ Toma un parametro cls que apunta a la clase y no a la instancia
  86.         como en el caso de self. NO PUEDE MODIFICAR EL ESTADO DE UNA INSTANCIA,
  87.         MODIFICA EL ESTADO DE LA CLASE"""
  88.         return f"Método de clase '{cls}'"
  89.  
  90.     @staticmethod
  91.     def metodo_estatico():
  92.         """ Acepta cualquier cantidad de parametros EXCEPTO cls y self
  93.         No pueden modificar el estado de un objeto ni el de una clase
  94.         estan restringidos y representan una forma de NAMESPACE de sus métodos"""
  95.         return "Metodo estatico"
  96.        
  97.        
  98. objeto = MiClase()
  99. print(objeto.metodo_de_clase())
  100. print(objeto.metodo_estatico())
  101. print(objeto.metodo())
  102. print(MiClase.metodo(objeto))
  103.  
  104. # repitamos pero sin instancias
  105. del(objeto)
  106. print(MiClase.metodo_de_clase())
  107. print(MiClase.metodo_estatico())
  108. print(objeto.metodo())  # da error, no hay self (no hay instancia)
  109.  
  110. '''
  111. #############  EJEMPLO   #####################
  112.  
  113. class Pizza:
  114.     def __init__(self, ingredientes):
  115.         self.ingredientes = ingredientes
  116.        
  117.     def __repr__(self):
  118.         return f"Pizza({self.ingredientes})"
  119.  
  120.     def area(self):
  121.         return self.area_circulo(self.radio)
  122.  
  123.     @classmethod
  124.     def margarita(cls):
  125.         return cls(["muzzarella", "tomates","ajo"])
  126.        
  127.     @classmethod
  128.     def napolitana(cls):
  129.         return cls(["muzzarella", "tomates","ajo", "oregano"])
  130.  
  131.    
  132.     '''
  133.     @staticmethod
  134.     def area_circulo(r):
  135.         """Este metodo estatico no accede a clases ni instancias, son
  136.         metodos independientes"""
  137.         from math import pi
  138.         return pi * r**2
  139.     '''
  140.  
  141. p = Pizza(["muzza","jamon","anana"])
  142. print(p)
  143. print(Pizza.margarita())
  144. print(Pizza.napolitana())
  145.  
  146.        
  147.            
  148.  
  149.  
  150.  
  151.  
  152.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement