Patrón de diseño Singleton en Python

Sdílet
Vložit
  • čas přidán 6. 09. 2024
  • 🚀 Desbloquea más de +170 cursos Premium a un precio especial: codigofacilito...
    🐊 Síguenos en:
    Twitter: / codigofacilito
    Facebook: / codigofacilito
    Instagram: / codigofacilito
    TikTok: codigofacilito.oficial
    ----
    Código Facilito es una de las plataformas de aprendizaje online de programación más grandes de habla hispana. Desde el 2010 formamos programadores en toda América Latina y España enseñando. HTML, JavaScript, React, Python, Rails, Go y mucho más.

Komentáře • 17

  • @alonsom.donayre1992
    @alonsom.donayre1992 Před 4 lety +2

    Usando este metodo, entenderia que User deja de ser una clase correcto? ya no se podria usar __super()__ ni cls

  • @xelisconcorde
    @xelisconcorde Před 4 lety

    Me gusto mucho el vídeo; creo que la segunda forma es más legible, porque el patrón es más explicito.
    Pero en el primer caso, no habría que adicionar tanta sintaxis adicional; solo agregar los parámetros *args, **kargs en donde se invoque el método constructor __new__

  • @kvelez
    @kvelez Před 9 měsíci

    def singleton(cls):
    instances = {} # dictionary
    def wrapper(*args, **kwargs): # arguments and dictionary of arguments
    if cls not in instances:
    instances[cls] = cls(*args, **kwargs)
    return instances[cls]
    return wrapper
    @singleton # decorator
    class User(object):
    def __init__(self, username):
    self.username = username
    if __name__ == '__main__':
    user = User('admin')
    user2 = User('guest')
    print(user is user2)

  • @juliocarrillo7329
    @juliocarrillo7329 Před 4 lety +1

    Gracias por enseñar sobre patrones, me es muy útil.

    • @daylisirte
      @daylisirte Před 3 lety

      Aca te dejó un tutorial de PYTHON desde CERO A MASTER, no hace faltas que sepas algo de programación, si te gusta el video dale like, suscribite, y compartilo, me ayudaras mucho:
      czcams.com/video/sNdMX_3Vxh0/video.html

  • @nachoa.g.4655
    @nachoa.g.4655 Před 4 lety +2

    Que username tiene al final el objeto instanciado?

  • @doctorfhernandez1
    @doctorfhernandez1 Před rokem

    Me funcionó perfectamente... Pero como hago para aceder a los atributos?
    Ejemplo:
    print(user1.username)
    No logré acceder a los atributos de la clase user.

  • @jseh_
    @jseh_ Před 4 lety +2

    cls es como el this de toda la vida?

  • @dustsharp4971
    @dustsharp4971 Před 3 lety +1

    Me sale un error, dice que el objeto no es llamable

  • @kvelez
    @kvelez Před 9 měsíci

    class User(object):
    __instance = None
    def __new__(cls):
    if cls.__instance is None: # if there is no instance
    cls.__instance = super().__new__(cls) # class as argument.
    return cls.__instance # executed only once.
    if __name__ == "__main__":
    user1 = User()
    user2 = User()
    print(user1 is user2)

  • @lizandro_mendoza
    @lizandro_mendoza Před 4 lety

    Entendí pero, ¿Para qué sirve ese patrón de diseño?🤔

    • @joseivanpalominorodriguez1427
      @joseivanpalominorodriguez1427 Před 4 lety +1

      Yo las uso para ahorrar memoria, ya que las implementó en librerías. Ejemplo una clase que te ayude a calcular en tiempo real el precio de un producto, para instanciarlo n* veces lo haces singleton.

    • @josejaguirre88
      @josejaguirre88 Před 4 lety +2

      Esto tiene que ver con el diseño orientado a objetos, sabes que una instancia de una clase requiere de memoria para estar alojada, cada vez que tu usas la instanciación creas un espacio en memoria, si tuvieras la clase Carro y requieres 5 carros cada uno con sus propiedades y atributos específicos los creas en 5 variables uno por uno.
      Pero hay ciertas clases que agrupan funcionalidad no repetitiva, imagínate que tuvieras una clase llamada Registro, en donde tiene un método (función) que necesita usar un objeto de tipo Carro como argumento, ese tipo de clases que solo agrupan funcionalidades no requieren de tener nada más que un espacio en memoria.
      Te preguntarás por que ? Bueno por que sería un mal diseño instanciar 5 veces la clase Registro si las 5 instancias hacen lo mismo que es registrar un carro, en el caso de los carros no por que puedes tener un mustang, audi etc...
      Entonces para la creación de ciertos objetos que pertenecen a una clase determinada en donde siempre se hagan las mismas operaciones y requieras que la memoria este optima se utiliza el patrón singleton, recordando que es un patrón de diseño de tipo creacional el cual te indica que en una clase determinada solo puede haber una instancia para garantizar el uso de memoria.

    • @pablogonzalezrobles4429
      @pablogonzalezrobles4429 Před 4 lety +1

      Yo lo uso en códigos para dispositivos electrónicos. Sólo hay una sóla placa madre (arduino, rpi, etc) pero se usan los pines en todo el script. Como el pin está conectado a un led en todo lugar del script y eso no va a cambiar, pues, usar un singleton para el Board y listo. Así, se puede usar en todo momento y lugar del script