Cho hai số num1 và num2. Nhiệm vụ là viết chương trình Python để tìm phép cộng của hai số này. ví dụ
Input: num1 = 5, num2 = 3 Output: 8 Input: num1 = 13, num2 = 6 Output: 19
Trong chương trình dưới đây để cộng hai số, trước tiên người dùng được yêu cầu nhập hai số và đầu vào được quét bằng hàm input[] và được lưu trong các biến số1 và số2. Sau đó, các biến số1 và số2 được cộng bằng toán tử số học + và kết quả được lưu trong biến tổng. Dưới đây là chương trình Python để cộng hai số.
ví dụ 1.
Python3
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.040
________ 81 ________ 82 ________ 83
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.044
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.042
Sum of 15 and 12 is 271
Sum of 15 and 12 is 272
Sum of 15 and 12 is 273
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.042
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.041
Sum of 15 and 12 is 276
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.044
Sum of 15 and 12 is 278
Sum of 15 and 12 is 279
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.040
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.041
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.042
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.043
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.044
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.045
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.046
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.047
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.044
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.049
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.046
Sum of 15 and 12 is 2781
Sum of 15 and 12 is 2782
Sum of 15 and 12 is 2783
Sum of 15 and 12 is 2784
Sum of 15 and 12 is 273
Sum of 15 and 12 is 2786
đầu ra
Sum of 15 and 12 is 27
ví dụ 2. Thêm hai số được cung cấp bởi đầu vào của người dùng
Python3
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.040
Sum of 15 and 12 is 2788
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.042
Sum of 15 and 12 is 2760
Sum of 15 and 12 is 2761
Sum of 15 and 12 is 2762
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.042
Sum of 15 and 12 is 2760
Sum of 15 and 12 is 2765
Sum of 15 and 12 is 2766
Sum of 15 and 12 is 2767
Sum of 15 and 12 is 273
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.042
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.0400
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.0401
Sum of 15 and 12 is 276
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.0400
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.0404
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.0405
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.0406
Sum of 15 and 12 is 279
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.0408
Sum of 15 and 12 is 273
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.042
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.043
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.044
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.045
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.046
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.047
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.044
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.049
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.046
Sum of 15 and 12 is 2781
Sum of 15 and 12 is 2782
Sum of 15 and 12 is 2783
First number: 13.5 Second number: 1.54 The sum of 13.5 and 1.54 is 15.0422
Sum of 15 and 12 is 273
Sum of 15 and 12 is 2786
Phương thức __add__[] trong Python chỉ định điều gì sẽ xảy ra khi bạn gọi + trên hai đối tượng. Khi bạn gọi obj1 + obj2, về cơ bản bạn đang gọi obj1. __add__[obj2]
Ví dụ: hãy gọi + trên hai đối tượng int
Sum of 15 and 12 is 271
đầu ra
Sum of 15 and 12 is 272
Điều này hoạt động, bởi vì int thực hiện phương thức __add__[] đằng sau hậu trường
Để thực hiện bổ sung hỗ trợ đối tượng tùy chỉnh với toán tử +, bạn cần triển khai phương thức __add__[] trong lớp
Trong hướng dẫn này, bạn tìm hiểu cách triển khai phương thức __add__[]. Bạn cũng tìm hiểu cách thêm các đối tượng thuộc các loại hỗn hợp. Cuối cùng, bạn sẽ xem cách cộng các loại đối tượng hỗn hợp có tính chất giao hoán [a + b = b + a]
Phương thức gạch dưới kép trong Python
Trong trường hợp bạn chưa quen với các phương pháp gạch dưới kép, đây là tóm tắt nhanh
Trong Python, các phương thức gạch dưới kép [còn được gọi là phương thức dunder] làm cho quá tải toán tử có thể xảy ra
Một phương thức dunder được triển khai trong một lớp để xác định hành vi cho những gì xảy ra khi một thao tác cụ thể được gọi trên một đối tượng
Một ví dụ phổ biến của phương pháp dunder là phương pháp. Phương thức này được tự động gọi khi một đối tượng được tạo
Ví dụ
Sum of 15 and 12 is 273
Phương thức __add__[] trong Python
Phương thức __add__[] trong Python là một phương thức đặc biệt xác định điều gì sẽ xảy ra khi bạn thêm hai đối tượng bằng toán tử +. Khi bạn gọi o1 + o2, bạn đang gọi o1. __thêm__[o2]
Hãy xem một ví dụ minh họa bằng cách tạo một lớp Trọng lượng
Sum of 15 and 12 is 274
Bây giờ, hãy tạo hai đối tượng Trọng lượng và thử cộng chúng lại với nhau
Sum of 15 and 12 is 275
đầu ra
Sum of 15 and 12 is 276
Lỗi này cho biết các đối tượng Trọng lượng không hỗ trợ phép cộng với toán tử +. Lý do tại sao điều này không thành công là do bạn chưa chỉ định điều gì sẽ xảy ra khi gọi + trên hai đối tượng Trọng lượng
Để xác định điều gì sẽ xảy ra khi thêm trọng số, bạn cần triển khai phương thức __add__[] trong lớp Trọng lượng
Trong ví dụ này, việc thêm hai đối tượng Cân nặng sẽ tạo ra một đối tượng Cân nặng mới có số kilôgam bằng tổng số kilôgam của hai đối tượng Cân nặng
Đây là giao diện của nó trong mã
Sum of 15 and 12 is 277
- Phương thức __add__[] lấy self làm tham số để biết trọng số của chính nó. Khi gọi w1 + w2, self đề cập đến w1
- Phương thức __add__[] cũng nhận tham số otherWeight để lấy trọng số của đối tượng Weight thứ hai. otherWeight giống với w2 khi gọi w1 + w2
Bây giờ bạn có thể thêm hai đối tượng Trọng lượng với nhau bằng cách
Sum of 15 and 12 is 278
đầu ra
Sum of 15 and 12 is 279
Lưu ý cách gọi w1 + w2 hoàn toàn giống với cách gọi w1. __thêm__[w2]
Ví dụ
Sum of 15 and 12 is 270
đầu ra
Sum of 15 and 12 is 279
Nhân tiện, bây giờ bạn cũng có thể gọi toán tử + trên nhiều Trọng số
Sum of 15 and 12 is 2721
đầu ra
Sum of 15 and 12 is 2722
Nhưng tại sao nó hoạt động?
Điều này tập trung vào quyền ưu tiên của nhà điều hành. Khi bạn tính tổng ba số nguyên, trước tiên Python tính tổng hai số nguyên rồi cộng số thứ ba vào tổng đó
Nói cách khác, trình thông dịch Python trước tiên tính tổng w1 + w2. Kết quả của việc này là một đối tượng số nguyên mà w3 được thêm vào. Vì vậy, phía sau hậu trường w1 + w2 + w3 trông như thế này
Sum of 15 and 12 is 2723
Vui lòng dùng thử trên trình chỉnh sửa của bạn. Ngoài ra, vui lòng mở rộng chuỗi để hiểu cách thức hoạt động của nó
Thêm các loại đối tượng khác nhau lại với nhau
Cho đến giờ bạn đã thấy cách cộng các đối tượng Trọng lượng lại với nhau
Nhưng giả sử bạn cũng muốn thêm số nguyên và trọng số
Hỗ trợ điều này thật dễ dàng. Sửa đổi phương thức __add__[] để nó kiểm tra loại đối tượng khác
- Nếu kiểu là int, thì hãy tạo một đối tượng Trọng lượng mới từ số kg của trọng lượng ban đầu bằng cách thêm giá trị số nguyên vào đối tượng đó
- Nếu loại là Trọng lượng, hãy cộng số kg của cả hai đối tượng lại với nhau và tạo Trọng lượng mới từ đó
Đây là giao diện của nó trong mã
Sum of 15 and 12 is 2724
Bây giờ bạn có thể thêm các đối tượng Trọng lượng và ints
Sum of 15 and 12 is 2725
đầu ra
Sum of 15 and 12 is 2726
Nhưng như bạn đã biết, tổng hai giá trị trong toán học là giao hoán. Nói cách khác, a+b là b+a. Hãy xem điều gì sẽ xảy ra khi chúng ta cố gắng đảo ngược thứ tự của phép cộng
Sum of 15 and 12 is 2727
đầu ra
Sum of 15 and 12 is 2728
Điều này không thành công vì bây giờ bạn đang cố gọi [200]. __thêm__[w1]. Nói cách khác, bạn cho rằng int cũng hỗ trợ thêm các đối tượng Weight vào nó, điều này rõ ràng là không đúng
Đây là nơi phương thức __radd__[] trợ giúp
Phương thức __radd__[] trong Python
Bây giờ bạn đã biết phương thức __add__[] làm gì, bạn nên biết __radd__[] làm gì, vì nó liên quan chặt chẽ với phương thức __add__[]
Phương thức __radd__[] có nghĩa là thêm ngược
Phép cộng đảo ngược biến a + b thành b + a. Điều này có nghĩa là một. __add__[b] biến thành b. __radd__[a]
Nhưng tại sao?
Hãy chứng minh vấn đề mà điều này giải quyết với hạng Trọng lượng từ chương trước
Như bạn đã thấy, việc thêm một đối tượng số nguyên và Trọng lượng theo thứ tự này không thành công
Sum of 15 and 12 is 2729
Điều này dẫn đến lỗi sau
Sum of 15 and 12 is 2728
Lỗi nói rằng không thể cộng int và Weight lại với nhau. Điều này không có gì đáng ngạc nhiên, vì kiểu int tích hợp không biết gì về Trọng lượng
Như bạn đã biết, gọi 150 + w1 tương đương với [150]. __thêm__[w1]. Vì vậy, dưới mui xe, gọi [150]. __add__[w1] gây ra sự cố
Để khắc phục sự cố, nó không phải là một tùy chọn để hỗ trợ int thêm các đối tượng Trọng lượng. Nhưng những gì bạn có thể làm thay vào đó là làm cho đối tượng Trọng lượng hỗ trợ thêm ints
Nói cách khác, bạn muốn trao đổi các cuộc gọi như thế này
Sum of 15 and 12 is 2731
Với cái này
Sum of 15 and 12 is 2732
Đây là những gì phương thức __radd__[] thực hiện. Nó đảo ngược thứ tự bổ sung. Nói cách khác, một. __add__[b] trở thành b. __radd__[a]
Vì vậy, hãy triển khai phương thức __radd__[] vào lớp Trọng lượng. Điều này sẽ trả về một đối tượng Trọng lượng trong đó một số nguyên được thêm vào kilôgam
Sum of 15 and 12 is 2733
Bây giờ mã bị lỗi trước đó chạy thành công
Sum of 15 and 12 is 2734
đầu ra
Sum of 15 and 12 is 279
Bây giờ bạn đã biết phương thức __radd__[] hoạt động như thế nào và khi nào nó có thể hữu ích
Nói chính xác, bạn cũng có thể sử dụng phương thức __add__[] trong phương thức __radd__[] vì nó biết cách xử lý các đầu vào số nguyên. Điều này đơn giản hóa mã một chút
Sum of 15 and 12 is 2736
Dù sao, việc hỗ trợ __radd__[] làm cho mã nhất quán. Bây giờ cả a + b và b + a đều hoạt động như mong đợi
Nhân tiện, bây giờ lớp Weight hỗ trợ __radd__[] nên cũng có thể gọi hàm sum[] trong danh sách các đối tượng Weight
Ví dụ
Sum of 15 and 12 is 2737
đầu ra
Sum of 15 and 12 is 2738
Nếu không có __radd__[] thì điều này là không thể. Điều này là do hàm sum[] tích hợp bắt đầu tính tổng từ 0. Điều này có nghĩa là thao tác đầu tiên sẽ là [0]. __add__[w1], sẽ không hoạt động nếu không có triển khai thêm ngược biến nó thành w1. __radd__[0]
Phần kết luận
Hôm nay bạn đã biết phương thức __add__[] trong Python là gì và cách sử dụng nó
Tóm lại, bất cứ khi nào bạn gọi obj1 + obj2 bằng Python, bạn thực sự đang gọi obj1. __add__[obj2] đằng sau hậu trường
Nói cách khác, để cộng hai đối tượng lại với nhau trong Python, lớp triển khai các đối tượng cần triển khai phương thức __add__[]
Một phương thức liên quan khác là phương thức __radd__[]. Điều này lật a+b với b+a. Khi một. __add__[b] không thành công, cuộc gọi trở thành b. __radd__[a]. Điều này hữu ích khi a không hỗ trợ thêm b, nhưng b có thể được hỗ trợ thêm a