2015-09-27 15 views
9

ho cercato di definire una classe e ignorare l'operatore tilde:Esiste la possibilità di sovrascrivere un operatore unario con uno binario in Python?

class foo: 
    def __invert__(self, other) 
     return 1232 # a random number , just as test 

Poi definendolo come:

>>> f = foo() 
>>> g = foo() 
>>> f ~ g 
    File "<input>", line 1 
    f ~ g 
    ^
SyntaxError: invalid syntax 

Possiamo sostituire l'operatore tilde con uno binario in modo che possiamo fare un'operazione come f ~ g senza generare un errore di sintassi.

+4

No, non c'è. –

+0

Non senza modificare Python stesso, no (anche se puoi farlo se lo desideri - vedi ad esempio http://stackoverflow.com/questions/214881/can-you-add-new-statements-to-pythons-syntax per un'introduzione). – jonrsharpe

+0

@jonrsharpe: e anche allora, come sarebbe il numero di operandi modificati * in fase di esecuzione *? La tua unica opzione sarebbe quella di cambiare completamente l'operatore '~', non puoi scegliere tra 1 o 2 operandi in fase di esecuzione. –

risposta

11

No, non è possibile farlo, non senza alterare radicalmente il modo in cui Python compila bytecode. Tutte le espressioni sono prima analizzate in in un Abstract Syntax Tree, quindi compilate in bytecode da questo ed è in fase di analisi che gli operandi e gli operatori sono raggruppati.

Quando si esegue il bytecode, non è più possibile decidere di accettare due operandi.

Problemi correlati