को देखते हुए के साथ निम्न उदाहरण है। तो मैं निम्नलिखित बातें क्या करना चाहते हैं:अजगर कक्षा पूर्णांक अनुकरण
f=Foo(3)
print int(f)+5 # is working
print f+5 # TypeError: unsupported operand type(s) for +: 'Foo' and 'int'
पहले बयान print int(f)+5
काम कर रहा है, कारण वहाँ दो पूर्णांक हैं। दूसरा एक असफल रहा है, क्योंकि मुझे अपनी कक्षा के साथ इस ऑपरेशन को करने के लिए __add__
लागू करना है।
तो पूर्णांक व्यवहार को लागू करने के लिए, मुझे सभी पूर्णांक अनुकरण विधियों को लागू करना होगा। मैं इसके आसपास कैसे हो सकता है। मैंने int
से उत्तराधिकारी की कोशिश की, लेकिन यह प्रयास सफल नहीं हुआ।
अद्यतन
int
से विरासत में विफल रहता है, तो आप उपयोग करना चाहते हैं एक __init__
:
class Foo(int):
def __init__(self, some_argument=None, value=0):
self.value=value
# do some stuff
def __int__(self):
return int(self.value)
यदि आप तो कहते हैं:
f=Foo(some_argument=3)
आपको मिलेगा:
अजगर 2.5 के साथ परीक्षण किया गया और 2.6
मुझे आपका प्रश्न समझ में नहीं आता है। एक चीज न करने के लिए आपको एक चीज के आसपास कैसे मिलना है जो आपको करना है? Fishslap! –
मैं एक पूर्णांक की तरह कक्षा कार्य करना चाहता हूं। वास्तविक पूर्णांक के लिए कार्यान्वयन हमेशा समान होता है, इसलिए हर बार जब आप इसका उपयोग करते हैं तो इसे लागू क्यों करें। __add__ विधि तब समझ में आता है जब आप वास्तविक जोड़ के अलावा अन्य सभी चीज़ों के लिए '+' - ऑपरेटर का उपयोग करते हैं। –