Trong Python, tôi có thể làm quá tải phương thức __add__
của đối tượng (hoặc phương thức "gạch dưới kép" khác). Điều này cho phép tôi xác định hành vi tùy chỉnh cho các đối tượng của tôi khi sử dụng toán tử Python.Biết nếu + hoặc __add__ được gọi trên một đối tượng
Có thể biết, từ bên trong phương pháp dunder, nếu phương pháp được gọi qua +
hoặc qua __add__
? Ví dụ: giả sử tôi muốn tạo đối tượng in "+"
hoặc "__add__"
tùy thuộc vào việc +
đã được sử dụng hay chưa hoặc trực tiếp __add__
được gọi trực tiếp hay không.
class MyAdder(object):
def __add__(self, other):
print method_how_created()
return 0
MyAdder() + 7
# prints "+", returns 0
MyAdder().__add__(7)
# prints "__add__", returns 0
Chặn sự tồn tại của một số ma thuật như method_how_created
, là có ánh xạ biểu tượng chuẩn cho các phương pháp sai? Tôi biết có các danh sách, chẳng hạn như http://www.python-course.eu/python3_magic_methods.php hoặc các giải pháp dựa trên phân tích cú pháp tài liệu của mô-đun operator
, như đã đề cập ở đây: Access operator functions by symbol. Có cách nào để tìm một bản đồ giữa các tên hàm và các ký hiệu ít bị tấn công hơn là phân tích các tài liệu hoặc tạo danh sách theo cách thủ công không?
Tại sao bạn lại muốn một cái gì đó như thế này? – wnnmaw
Hãy sửa tôi nếu tôi sai, nhưng không phải '+' chỉ gọi '__add__'? –
@ OrangeFlash81. Và đối với các lệnh 'NotImplemented'' __radd__' – Bharel