2015-09-27 5 views
9

मैं एक वर्ग को परिभाषित और लहरिल ऑपरेटर को ओवरराइड करने की कोशिश की:क्या पाइथन में बाइनरी वाले एक यूनरी ऑपरेटर को ओवरराइड करने की संभावना है?

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

फिर बुला इसे पसंद:

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

हम एक द्विआधारी एक के साथ टिल्ड ऑपरेटर की जगह ले सकता तो हम जैसे एक ऑपरेशन कर सकते हैं एक वाक्यविन्यास त्रुटि उठाए बिना f ~ g

+4

नहीं, नहीं है। –

+0

पायथन को स्वयं संशोधित किए बिना, नहीं (हालांकि यदि आप चाहें तो ऐसा कर सकते हैं - उदाहरण के लिए http://stackoverflow.com/questions/214881/can-you-add-new-statements-to-pythons-syntax परिचय के लिए)। – jonrsharpe

+0

@jonrsharpe: और फिर भी, कैसे होगा द्वारा ऑपरेंड की संख्या कार्यावधि में बदल * *? आपका एकमात्र विकल्प '~' ऑपरेटर को पूरी तरह से बदलना होगा, आप रनटाइम पर 1 या 2 ऑपरेंड के बीच नहीं चुन सकते हैं। –

उत्तर

11

नहीं, आप ऐसा नहीं कर सकते, नहीं मौलिक फेरबदल कैसे अजगर बाईटकोड संकलित बिना। सभी भाव पहले एक सार सिंटेक्स पेड़ में पार्स, तो उस से बाईटकोड में संकलित हैं, और यह पार्स चरण कि ऑपरेंड और ऑपरेटरों बांटा जाता है पर है।

समय बाईटकोड चलाता है तुम अब दो ऑपरेंड स्वीकार करने के लिए तय कर सकते हैं के द्वारा।

संबंधित मुद्दे