এটি পুরোপুরি অবজেক্টের উপর নির্ভর করে i।
+=কল __iadd__পদ্ধতি (এটা যদি উপস্থিত থাকে - ফিরে পতনশীল __add__যদি এটা কোন অস্তিত্ব নেই) যেহেতু +কল __add__পদ্ধতি 1 বা __radd__কয়েক ক্ষেত্রেই পদ্ধতি 2 ।
একটি এপিআই দৃষ্টিকোণ থেকে, স্থান__iadd__ পরিবর্তনযোগ্য বস্তু পরিবর্তনের জন্য ব্যবহৃত হবে বলে মনে করা হচ্ছে (যে বস্তুটি রূপান্তরিত হয়েছিল তা ফেরত দেওয়া হয়েছে ) তবে কোনও কিছুর একটি নতুন উদাহরণ ফিরে আসা উচিত । জন্য অপরিবর্তনীয় বস্তু, উভয় পদ্ধতি একটি নতুন দৃষ্টান্ত আসতে, কিন্তু একই নামের পুরানো দৃষ্টান্ত ছিল বর্তমান নামস্থান নতুন দৃষ্টান্ত করবে। এই জন্যই__add____iadd__
i = 1
i += 1
বর্ধিত বলে মনে হচ্ছে i। বাস্তবে, আপনি একটি নতুন পূর্ণসংখ্যা পেয়েছেন এবং এটিকে "শীর্ষে" অর্পণ করুন i- পুরানো পূর্ণসংখ্যার একটি উল্লেখ হারিয়ে ফেলে। এই ক্ষেত্রে, i += 1ঠিক হিসাবে একই i = i + 1। তবে বেশিরভাগ পরিবর্তনযোগ্য বস্তুর সাথে এটি একটি ভিন্ন গল্প:
একটি দৃ concrete় উদাহরণ হিসাবে:
a = [1, 2, 3]
b = a
b += [1, 2, 3]
print a #[1, 2, 3, 1, 2, 3]
print b #[1, 2, 3, 1, 2, 3]
তুলনা করা:
a = [1, 2, 3]
b = a
b = b + [1, 2, 3]
print a #[1, 2, 3]
print b #[1, 2, 3, 1, 2, 3]
নোটিশ কিভাবে প্রথম উদাহরণে, যেহেতু bএবং aরেফারেন্স একই বস্তুর যখন আমি ব্যবহার +=উপর b, এটি একটি প্রকৃত পরিবর্তন b(এবং aতাও পরিবর্তন সূচিত - সব পরে, এটি একই তালিকা উল্লেখ করা হয়েছে)। তবে দ্বিতীয় ক্ষেত্রে, যখন আমি এটি করি b = b + [1, 2, 3], এটি সেই তালিকাটি bরেফারেন্স করছে এবং এটি একটি নতুন তালিকার সাথে যুক্ত করে [1, 2, 3]। এরপরে এটি বর্তমান নামস্থানে সংক্ষিপ্ত তালিকাটি সংরক্ষণ করে b- এর bআগে লাইনটি কী ছিল তা বিবেচনা ছাড়াই ।
1 এক্সপ্রেশনে x + y, যদি x.__add__বাস্তবায়িত হয়নি অথবা যদি x.__add__(y)আয় NotImplemented এবং xএবং yবিভিন্ন ধরনের আছে , তারপর x + yকল করার চেষ্টা করে y.__radd__(x)। সুতরাং, আপনার যেখানে আছে
foo_instance += bar_instance
যদি Fooবাস্তবায়ন না হয় __add__বা __iadd__তারপরে ফলাফল এখানে একই রকম
foo_instance = bar_instance.__radd__(bar_instance, foo_instance)
2 এক্সপ্রেশনে foo_instance + bar_instance, bar_instance.__radd__বিচার হবে সামনে foo_instance.__add__ যদি ধরণ bar_instanceধরণ একটি উপশ্রেণী হয় foo_instance(যেমন issubclass(Bar, Foo))। এই জন্য মূলদ কারণ Barএকটি "উচ্চ স্তরের" বস্তু চেয়ে কিছু অর্থে হয় Fooতাই Barঅগ্রাহ্য করার বিকল্প পাওয়া উচিত Foo'র আচরণ।
+=extend()তালিকার ক্ষেত্রে যেমন কাজ করে ।