मैं निम्नलिखित कोड है: अगर मैं int
का एक उपवर्ग बनानेऑपरेटर ओवरलोडिंग करते समय पाइथन कॉन्स प्रकार करता है?
a = str('5')
b = int(5)
a == b
# False
लेकिन, और __cmp__
reimplement:
class A(int):
def __cmp__(self, other):
return super(A, self).__cmp__(other)
a = str('5')
b = A(5)
a == b
# TypeError: A.__cmp__(x,y) requires y to be a 'A', not a 'str'
क्यों इन दो अलग अलग कर रहे हैं? क्या पाइथन रनटाइम int.__cmp__()
द्वारा फेंक टाइपर को पकड़ रहा है, और इसे False
मान के रूप में व्याख्या कर रहा है? क्या कोई मुझे 2.x cpython स्रोत में थोड़ा सा इंगित कर सकता है जो दिखाता है कि यह कैसे काम कर रहा है?
एक तरफ ध्यान दें: आप जानते हैं कि '__cmp__' उम्र पहले बहिष्कृत किया गया था? आपको समृद्ध-तुलनात्मक कार्यों को लागू करना चाहिए। – Bakuriu
हां, यह तब आया जब मैं यह पता लगाने की कोशिश कर रहा था कि क्या मुझे अपवाद उठाना चाहिए या __eq__ के कार्यान्वयन में लागू नहीं किया जाना चाहिए। मैं देखना चाहता था कि बिल्टिन पायथन कक्षाओं ने क्या किया, और यह उदाहरण पाया जो असंगत लग रहा था। – Chris