Python'daki [] operatörünü nasıl geçersiz kılabilirim?


225

[]Python'daki bir sınıf için işleci (alt simge notasyonu) geçersiz kılma yönteminin adı nedir ?

Yanıtlar:


290

__getitem__Yöntemi kullanmanız gerekir .

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

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

Ve eğer değerleri ayarlayacaksanız, __setitem__yöntemi de uygulamanız gerekir , aksi takdirde bu gerçekleşir:

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

63

Tam olarak aşırı yüklenmek için __setitem__ve __delitem__yöntemlerini de uygulamanız gerekir .

Düzenle

Neredeyse unutuyordum ... bir listeyi tamamen taklit etmek istiyorsanız, ihtiyacınız da var __getslice__, __setslice__ and __delslice__.

Hepsi http://docs.python.org/reference/datamodel.html adresinde belgelenmiştir.


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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.