जैसा कि अन्य उत्तरों का उल्लेख किया गया है, आप वास्तव में ऑपरेटरों को अधिभारित कर सकते हैं (कक्षा में विशेष विधियों को निर्धारित करके, यानी जिनके नाम दो अंडरस्कोर के साथ शुरू होते हैं और समाप्त होते हैं)। सभी विवरण here हैं।
आपके सवालों के जवाब को पूरा करने के लिए: आप नए ऑपरेटरों को परिभाषित नहीं कर सकते; लेकिन <<
एक नया ऑपरेटर नहीं है, यह एक मौजूदा है, और यह कक्षा __lshift__
विधि में परिभाषित करके अधिभारित है।
एक ऐतिहासिक नोट के रूप में, यह सी ++ में भी काफी स्थिति है - लेकिन ऑपरेटरों का सटीक सेट जो आप अधिभारित कर सकते हैं, दोनों भाषाओं के बीच अलग है। उदाहरण के लिए, सी ++ में, आप गुण एक्सेस को अधिभारित नहीं कर सकते हैं, .
; पायथन में, आप __getattr__
(या __getattribute__
, विभिन्न अर्थशास्त्र के साथ) और __setattr__
के साथ कर सकते हैं। इसके विपरीत, पायथन =
(सादा असाइनमेंट) में ऑपरेटर नहीं है, इसलिए आप इसे अधिभारित नहीं कर सकते हैं, जबकि सी ++ में यह एक ऑपरेटर है और आप इसे अधिभारित कर सकते हैं।
<<
एक ऑपरेटर है, और दोनों भाषाओं में, अतिभारित किया जा सकता - कि कैसे <<
और >>
है, जबकि बाएँ और दाएँ बदलाव के अपने शुरुआती अर्थ खोने नहीं, यह भी अजगर में आई/सी में हे स्वरूपण ऑपरेटरों ++ (नहीं बन गया -)।
स्रोत
2009-12-20 17:06:58
डुप्लिकेट प्रश्न: http://stackoverflow.com/questions/932328। Http://stackoverflow.com/questions/1552260 भी देखें। –
यह एक डुप्लिकेट प्रश्न हो सकता है, लेकिन मुझे स्वीकृत उत्तर अन्य प्रश्नों की तुलना में अधिक उपयोगी पाया गया है, क्योंकि यह सभी __ xxx __ विधियों के विवरण से लिंक करता है। – ToolmakerSteve
@ToolmakerSteve - क्षमा करें, मैंने ध्वजांकित किया और इसे उत्तर के रूप में हटा दिया। यह एक लिंक से ज्यादा कुछ नहीं था, जिसका मतलब है कि यह लिंक्रॉट के अधीन था। – ArtOfWarfare