পাইথনের [] অপারেটরকে কীভাবে ওভাররাইড করা যায়?


225

[]পাইথনের একটি শ্রেণীর জন্য অপারেটর (সাবস্ক্রিপ্ট নোটেশন) ওভাররাইড করার পদ্ধতির নাম কী ?

উত্তর:


290

আপনার __getitem__পদ্ধতিটি ব্যবহার করা দরকার ।

class MyClass:
    def __getitem__(self, key):
        return key * 2

myobj = MyClass()
myobj[3] #Output: 6

এবং যদি আপনি মান নির্ধারণ করতে চলেছেন তবে আপনাকেও __setitem__পদ্ধতিটি বাস্তবায়ন করতে হবে, অন্যথায় এটি ঘটবে:

>>> myobj[5] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'

63

এটি পুরোপুরি ওভারলোড করার জন্য আপনাকেও পদ্ধতি __setitem__এবং __delitem__পদ্ধতিগুলি প্রয়োগ করতে হবে ।

সম্পাদন করা

আমি প্রায় ভুলে গেছি ... আপনি যদি একটি তালিকা সম্পূর্ণরূপে অনুকরণ করতে চান তবে আপনারও এটি দরকার __getslice__, __setslice__ and __delslice__

Http://docs.python.org/references/datamodel.html এ সমস্ত নথিভুক্ত রয়েছে


67
__getslice__, __setslice__` এবং __delslice__' have been deprecated for the last few releases of ver 2.x (not sure exactly when), and are no longer supported in ver 3.x. Instead, use __getitem__ . __setitem__` এবং __delitem__' and test if the argument is of type ফালি , i.e.: যদি isinstance (ARG, ফালি): ...
ডন ও'ডোনেল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.