Bagaimana cara mengganti operator [] di Python?


Jawaban:


290

Anda perlu menggunakan __getitem__metode ini .

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

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

Dan jika Anda akan menetapkan nilai, Anda harus menerapkan __setitem__metode ini juga, jika tidak, ini akan terjadi:

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

63

Untuk membebani sepenuhnya, Anda juga perlu menerapkan __setitem__dan __delitem__metode.

sunting

Saya hampir lupa ... jika Anda ingin sepenuhnya meniru daftar, Anda juga perlu __getslice__, __setslice__ and __delslice__.

Semuanya didokumentasikan di http://docs.python.org/reference/datamodel.html


67
__getslice__, __setslice__` dan __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__` dan __delitem__' and test if the argument is of type iris , i.e.: jika isinstance (arg, slice): ...
Don O'Donnell

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.