Factorías en Python

Hoy se viene una entrada rápida, ya que me gustaría hablar sobre el uso de factorías en Python y por qué pueden tener sentido.

Factorías en Python

¿Alguna vez has tenido que crear un objeto múltiples veces teniendo que pasarle siempre la misma configuración?

¿Alguna vez has necesitado garantizar que solo se cree una instancia de un objeto y que esta sea compartida por toda la aplicación?

Si la respuesta es si, como es mi caso, entonces las factorías son tu mejor amigo. Como veremos a continuación, las factorías son muy fáciles de crear en Python y con muy poco código podremos mejorar notablemente la calidad de nuestra aplicación.

Cómo implementar una factoría en Python

A nivel de código es bastante sencillo, para crear una factoría y que esta sea instanciada una única vez, necesitamos crear una clase que tenga una propiedad de clase que sea la instancia de la factoría y un método de clase que sea el encargado de instanciar la propiedad.

Con el decorador @classmethod tenemos acceso a las propiedades de la clase, lo que nos va a permitir asignar la propiedad de la factoría de tal forma que en posteriores llamadas a la factoría, se devuelva siempre la misma instancia.

class SdkAirtableRepositoryFactory:
    _airtable_repository = None

    @classmethod
    def make(cls) -> SdkAirtableRepository:
        if not isinstance(cls._airtable_repository, SdkAirtableRepository):
            airtable_api = Api(config.AIRTABLE_ACCESS_TOKEN)
            airtable_table = airtable_api.table(config.BASE_ID, "my-table")
            cls._airtable_repository = SdkAirtableRepository(airtable_table)
        return cls._airtable_repository

De esta forma podemos garantizar que en toda nuestra aplicación, siempre se va a usar la misma instancia de la propiedad de la factoría.

Además, nos va a permitir evitar la creación innecesaria de objetos, algo que siempre es positivo.