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.