Làm cách nào để ghi đè toán tử [] trong Python?


225

Tên của phương thức ghi đè []toán tử (ký hiệu đăng ký) cho một lớp trong Python là gì?

Câu trả lời:


290

Bạn cần sử dụng __getitem__phương pháp .

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

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

Và nếu bạn sẽ thiết lập các giá trị, bạn cũng sẽ cần thực hiện __setitem__phương pháp , nếu không điều này sẽ xảy ra:

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

63

Để quá tải nó, bạn cũng cần phải thực hiện __setitem____delitem__các phương thức.

biên tập

Tôi gần như quên mất ... nếu bạn muốn mô phỏng hoàn toàn một danh sách, bạn cũng cần __getslice__, __setslice__ and __delslice__.

Có tất cả tài liệu trong http://docs.python.org/reference/datamodel.html


67
__getslice__, __setslice__` và __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__` và __delitem__' and test if the argument is of type lát , i.e.: nếu isinstance (arg, lát): ...
Don O'Donnell

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.