Perché MaybeChannelBound è richiamabile?

4

La classe Queue nella libreria python di kombu eredita da MaybeChannelBound, che a sua volta implementa il metodo call (rendendolo chiamabile). Il metodo call () stesso è un sottile involucro attorno al metodo bind ().

Non è chiaro il motivo per cui questo è stato fatto, poiché chiamare il metodo bind () sembra (almeno per la mia mente semplice) per essere più chiaro e più descrittivo dell'intento della funzione.

Perché qualcuno dovrebbe usare il metodo call () in una situazione come questa?

    
posta William Payne 30.05.2012 - 00:39
fonte

1 risposta

2

William,

Ho scritto il codice, quindi suppongo di dover dare una risposta;)

MaybeChannelBound è una classe base comune per Exchange e Queue , perché entrambi hanno la stessa semantica (nome terribile, come spesso accade quando si tenta di usare l'ereditarietà ...)

Il __call__ era una decisione API, quindi:

queue(channel)

restituisce una coda associata a un canale in modo da poter eseguire operazioni su di esso. Ho semplicemente pensato che la chiamata fosse migliore nell'API, non ricordo esattamente perché ho incluso anche il metodo .bind, ma posso indovinarlo

  • Se qualcuno volesse creare una sottoclasse di questo, quindi ignorare un'operazione bind sembrerebbe più ordinata rispetto a __call__ .

  • Durante la digitazione anatra sarebbe piuttosto inutile controllare __call__ (chiamabile), e .bind potrebbe essere usato per questo scopo.

Nel recente Kombu raramente devi legare i canali da solo, ad es. quando pubblichi un messaggio ora invii un elenco di entità da dichiarare a Producer.publish invece (e anche le dichiarazioni sono memorizzate nella cache):

producer = Producer(connection)
producer.publish(message, retry=True, declare=[queue])

dove in precedenza dovresti scrivere:

with connection.channel() as channel:
    queue(channel).declare()
    producer.publish(message)

Non c'è sempre una ragione universalmente valida per tutto ciò che faccio però, a volte faccio le cose solo perché è una mia pratica. A volte queste pratiche risultano utili, altre volte finiscono semplicemente per essere inutilizzabili.

    
risposta data 26.06.2012 - 01:00
fonte

Leggi altre domande sui tag