Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Truco Python: El funcionario (o la Dicción)

Su­pon­ga­mos que al­gu­na vez ex­pu­sis­te un dic­cio­na­rio co­mo par­te de la in­ter­fa­ce de un ob­je­to. Así que la gen­te vie­ne ha­cien­do co­sas co­mo es­ta:

object.data[foo]['bar']

Y ahora no querés que foo sea obligatorio, porque lo podés adivinar, o tiene un default razonable. De hecho, lo que querés exponer es esto:

object.data(bar, foo='foo')

Acá hay una idea de co­mo ha­cer­lo sin rom­per el có­di­go vie­jo:

class fundict(dict):
    def __call__(self, bar, foo='foo'):
        return self[foo][bar]

Eso es un dic­cio­na­rio que es "ca­lla­ble", con lo que es in­dis­tin­gui­ble de una fun­ció­n. Una fun­ció­n-­dic­cio­na­rio. Un fun­cio­na­rio. Y por su­pues­to lo po­dés ha­cer al re­vés e im­ple­men­tar una fun­ción que sir­va co­mo dic­cio­na­rio. Un dic­cio­na­rio­-­fun­ció­n, una dic­ció­n. Pe­ro co­mo ese es más la­bu­ro, hi­ce es­te.


Contents © 2000-2020 Roberto Alsina