2013-03-30 4 views
25

J'essaie d'apprendre l'exécution en Python pour ma classe et je dois surcharger l'opérateur() pour cela. Cependant, je ne comprends pas comment je peux contourner l'opérateur(). Pouvez-vous expliquer la logique derrière la surcharge des parenthèses? Devrais-je surcharger d'abord (et puis) ​​ou puis-je faire l'un de ces? Aussi, y a-t-il un nom spécial pour l'opérateur de parenthèses?Opérateur Overload() en Python

+3

[Émulation objets appelables] (http://docs.python.org/2/reference/datamodel.html#emulating-callable- objets) – soon

Répondre

30

Vous pouvez faire un objet appelable en mettant en œuvre la méthode __call__:

class FunctionLike(object): 
    def __call__(self, a): 
     print "I got called with %r!" % (a,) 

fn = FunctionLike() 
fn(10) 

# --> I got called with 10! 
+1

Puis-je effectuer des opérations de base avec cet objet appelable, tel que l'ajout? – jdyg

+1

Vous pouvez fournir presque toutes les opérations de langue: http://docs.python.org/2/reference/datamodel.html#special-method-names –

+0

Est-ce que '()' un opérateur d'appel appelle essentiellement l'objet en question avec un certain argument (ou son absence)? – MadPhysicist