आप operator
मॉड्यूल (add, concat) के लिए स्रोत की जाँच हैं, तो आप उन कार्यों के लिए इन परिभाषाओं मिलेगा:
def add(a, b):
"Same as a + b."
return a + b
def concat(a, b):
"Same as a + b, for a and b sequences."
if not hasattr(a, '__getitem__'):
msg = "'%s' object can't be concatenated" % type(a).__name__
raise TypeError(msg)
return a + b
तो वहाँ वास्तव में उस concat
को छोड़कर कोई अंतर नहीं है वास्तव में एक दृश्य की आवश्यकता है प्रकार। दोनों कार्य +
ऑपरेटर का उपयोग करते हैं जो प्रभाव आपके द्वारा जोड़े गए प्रकारों पर निर्भर करता है।
सामान्यतः, operator
module का उपयोग करना उस समय अधिक उपयोगी नहीं है। मॉड्यूल का अधिकतर उपयोग होता है जब आपको एक ऑपरेशन करने वाले फ़ंक्शन को पास करने की आवश्यकता होती है, उदाहरण के लिए map
, filter
, या reduce
जैसे कार्यात्मक कार्यों के लिए। लेकिन आमतौर पर, आप सीधे +
ऑपरेटर का उपयोग कर सकते हैं।
अंडरस्कोर कार्य (__add__
और __concat__
) के रूप में, इन just aliases हैं:
__add__ = add
__concat__ = concat
लेकिन उन हैं निश्चित रूप से special methods कस्टम प्रकार के लिए ऑपरेटरों को ओवरलोड करने के लिए इस्तेमाल से संबंधित नहीं।वे ऐसे कार्य हैं जो समान नामों के समान नाम से मेल खाते हैं, शायद उन्हें समान दिखने के लिए। ध्यान दें कि वस्तुओं पर कोई विशेष __concat__
विधि नहीं है।
एक कस्टम प्रकार पर __add__
को लागू करने हालांकि प्रभावित करने के तरीके ऑपरेटर मॉड्यूल कार्यों काम करते हैं, उदाहरण के लिए होगा:
>>> class Example:
def __init__ (self, x):
self.x = x
def __repr__ (self):
return 'Example({})'.format(self.x)
def __add__ (self, other):
return Example(self.x + other.x)
>>> a = Example(2)
>>> b = Example(4)
>>> operator.add(a, b)
Example(6)
>>> a + b
Example(6)
आप देख सकते हैं, operator.add
विशेष विधि Example.__add__
के कार्यान्वयन का उपयोग करेगा; लेकिन इसका कारण यह है कि operator.add
का कार्यान्वयन सिर्फ +
ऑपरेटर का उपयोग करता है (जो व्यवहार विशेष रूप से विशेष __add__
विधि द्वारा परिभाषित किया गया है)।
खैर प्रलेखन आप एक से जुड़ा हुआ के अनुसार संख्या के लिए है और एक कि '__concat__' एक *" जादू विधि "की तरह नहीं है * दृश्यों के लिए है – Craicerjack
नोट' __add__' है: https: // डॉक्स .python.org/2/संदर्भ/डेटामोडेल.html – jonrsharpe
* क्या नाम के अलावा * कोई अंतर है? – user2864740