Tôi có một lớp Vec3D (xem http://pastebin.com/9Y7YbCZq)Override + nhà điều hành trong python cho phao + obj
Hiện nay, tôi cho phép Vec3D (1,0,0) + 1.2 nhưng tôi đang tự hỏi làm thế nào tôi nên tiến hành quá tải toán tử + theo cách sao cho tôi nhận được kết quả sau:
>>> 3.3 + Vec3D(1,0,0)
[4.3, 3.3 , 3.3]
Mã không bắt buộc, nhưng chỉ là gợi ý mà tôi nên xem. nói chung cái gì đó sẽ có nhiều hữu ích hơn là một thực hiện cụ thể như tôi cần phải thực hiện điều tương tự cho phép nhân, phép trừ, vv
Tôi không thấy thông báo "Cái gì đó tổng quát sẽ hữu ích hơn việc triển khai cụ thể vì tôi cần triển khai cùng một phép nhân, trừ vv" một phần nhưng liên kết trong câu trả lời của tôi sẽ đưa bạn đến [danh sách các phương pháp ma thuật được sử dụng để mô phỏng một kiểu số] (http://docs.python.org/reference/datamodel.html#emulating-numeric-types). – agf
Không sao, tôi đã ngừng đọc sau "Bạn đang tìm kiếm __radd__" và nhấp vào liên kết :) Tuy nhiên, mã của bạn đã làm cho nó rõ ràng hơn rất nhiều, vì vậy, cảm ơn –
Nếu bạn có __add tùy chỉnh __() cho lớp học của mình, sau đó ngay sau khi định nghĩa của nó, bạn chỉ có thể bao gồm một dòng '__radd__ = __add__'. Điều này làm việc vì radd hoán đổi thứ tự đối số cho bạn. –