2012-04-23 20 views
16

In Python implementieren können Sie Instanzen durch die Implementierung der __call__ Methode aufrufbar machen. Zum BeispielWann sollte ich __call__

class Blah: 
    def __call__(self): 
     print "hello" 

obj = Blah() 
obj() 

Aber ich kann auch ein Verfahren zur Herstellung meiner eigenen implementieren, sagen 'run':

class Blah: 
    def run(self): 
     print "hello" 

obj = Blah() 
obj.run() 

Wann sollte ich __call__ implementieren?

+9

Wenn es Sinn macht. –

+12

Wenn Sie sich nicht sicher sind, ob Sie '__call__' brauchen, dann brauchen Sie' __call__' nicht. –

Antwort

19

Das ist schwer zu beantworten. Meine Meinung ist, dass Sie nie __call__ definieren sollten, es sei denn, Ihr tatsächliches Ziel ist es, eine Funktion zu erstellen. Es ist nicht etwas, das Sie tun würden, nachdem Sie bereits ein traditionelles Objekt erstellt haben.

Mit anderen Worten, wenn Sie aus fangen denken: „Ich ein Objekt erstellen werde“ Sie sollen nie auf der Umsetzung __call__ beenden. Wenn auf der anderen Seite beginnen Sie heraus zu denken: „Ich werde eine Funktion erstellen ... aber ich wünschte, ich das Objekt Framework verwenden könnte meine Funktion hat einig Zustand zu lassen,“ dann könnte man die Funktion als Objekt erstellen mit state, und definieren __call__, um es wie eine Funktion zu fungieren.

Ich möchte ein letzter Ratschlag einschließen, die durch @Paul Manta in einem Kommentar auf die Frage zur Verfügung gestellt wurde, wo er schrieb:

Wenn Sie unsicher sind, ob Sie __call__ brauchen, dann nicht Sie tun brauche __call__

Ich denke, das ist ein guter Rat.

+0

+1 - Manchmal werden Verschlüsse zu einem unsäglichen Durcheinander, und ein aufrufbares Objekt ist ein besserer Ansatz. Aber das war es schon. – detly

Verwandte Themen