Cộng hai số trong python bằng cách sử dụng lớp và đối tượng

Chương trình lấy chiều dài và chiều rộng từ người dùng và tìm diện tích hình chữ nhật bằng cách sử dụng các lớp

Giải pháp vấn đề

1. Tạo một lớp và sử dụng hàm khởi tạo để khởi tạo các giá trị của lớp đó.
2. Tạo các phương thức cộng, trừ, nhân, chia hai số và trả về kết quả tương ứng.
3. Lấy hai số làm đầu vào và tạo một đối tượng cho lớp truyền hai số làm tham số cho lớp.
4. Sử dụng đối tượng, gọi chức năng tương ứng tùy thuộc vào sự lựa chọn của người dùng.
5. In kết quả cuối cùng.
6. Thoát

Chương trình/Mã nguồn

Đây là mã nguồn của Chương trình Python để lấy chiều dài và chiều rộng từ người dùng và tìm diện tích hình chữ nhật. Đầu ra chương trình cũng được hiển thị bên dưới

Trong hướng dẫn này, chúng ta sẽ học cách viết một chương trình cộng hai số cơ bản trong Python. Chương trình của chúng tôi sẽ lấy hai đầu vào từ người dùng và trả về tổng của chúng. Để lấy đầu vào từ người dùng trong Python, chúng tôi sử dụng một hàm có tên là input(). Đây là một chức năng sẵn có, nhận đầu vào từ người dùng và luôn chuyển đổi nó thành chuỗi

Để lấy đầu vào số nguyên, chúng ta sử dụng hàm int(), đây cũng là hàm được xác định trước. Mã của chương trình của chúng tôi sẽ lấy hai đầu vào của người dùng như sau và trả về tổng của những số đó làm đầu ra. Ví dụ

Đầu vào- 2,5

Đầu ra- 7

Bây giờ, chúng ta hãy tiếp tục để hiểu hoạt động của mã

thuật toán

Bước 1- Xác định hàm Sum_of_two_num() để cộng hai số

Bước 2- Truyền hai số làm tham số và cộng chúng

Bước 3- Khai báo biến sum để lưu tổng các số

Bước 4- Lấy người dùng nhập hai số

Bước 5- Gọi hàm Sum_of_two_num() và truyền đầu vào làm tham số

Bước 6- Khai báo biến để lưu giá trị trả về của hàm

Bước 7- In tổng

Chương trình Python

Nhìn vào chương trình để hiểu việc thực hiện phương pháp nêu trên

def Sum_of_two_num(n,m):
    sum=n+m
    return sum

#take user input    
a=int(input("Enter first number:"))
b=int(input("Enter second number:"))

x=Sum_of_two_num(a,b)

print("Sum of",a,"and",b,"is",x)


Nhập số đầu tiên. 2
Nhập số thứ hai. 4
Tổng của 2 và 4 là 6

Sự kết luận

Trong hướng dẫn này, chúng ta đã học cách cộng hai số bằng ngôn ngữ lập trình Python. Chúng tôi đã xác định một chức năng chấp nhận hai đầu vào của người dùng làm tham số. Trong định nghĩa hàm, chúng ta đã khai báo một biến sum để lưu tổng của hai số. Giá trị của biến sum được hàm trả về. Chúng tôi đã khai báo một biến khác bắt giá trị trả về của hàm và sử dụng biến này để hiển thị đầu ra

int có phương thức

print 5..__add__(3)  # 8.0
print 5.0.__add__(3) # same thing
7, bạn sẽ gọi nó trên một thể hiện của int, giống như bất kỳ phương thức nào khác được gọi

print 5.__add__(3) # syntax error

mặc dù điều đó sẽ không hoạt động.

print 5..__add__(3)  # 8.0
print 5.0.__add__(3) # same thing
8 thực sự là một số float, vì vậy bạn đã mắc lỗi cú pháp. dấu ngoặc quanh số nguyên là bắt buộc

print (5).__add__(3) # 8

cách khác, bạn có thể thêm một

print 5..__add__(3)  # 8.0
print 5.0.__add__(3) # same thing
9 khác nhưng sau đó bạn đang gọi
print 5..__add__(3)  # 8.0
print 5.0.__add__(3) # same thing
7 trên
class Number(int):
    def __add__(self, other):
        return self - (-other)

print Number(5) + 3 # 8
1, không phải
class Number(int):
    def __add__(self, other):
        return self - (-other)

print Number(5) + 3 # 8
2

print 5..__add__(3)  # 8.0
print 5.0.__add__(3) # same thing

ghi đè nó đi một cái gì đó như thế này

class Number(int):
    def __add__(self, other):
        return self - (-other)

print Number(5) + 3 # 8

tất nhiên đây là một ví dụ ngớ ngẩn, một phiên bản của

print (5).__add__(3) # 8
0 sẽ hoạt động gần giống như một int. (sự khác biệt là int là một kiểu dựng sẵn, nó được viết bằng C)

tôi đã phủ định và trừ đi

print (5).__add__(3) # 8
1 vì
print (5).__add__(3) # 8
2 sẽ đề cập đến phương thức này, nó sẽ gọi chính nó vô tận và nếu không thì sẽ bị sập

ồ vâng và, ghi đè, không quá tải, đó là một thứ khác và không tồn tại trong python - đó là khi có nhiều phiên bản của một hàm hoặc phương thức, tất cả đều có cùng tên nhưng các tham số khác nhau. https. // vi. wikipedia. org/wiki/Function_overloading

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

________số 8

đầu ra

30
30

Đ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 thức dunder là phương thức __init__. Phương thức này được tự động gọi khi một đối tượng được tạo

Ví dụ

print 5.__add__(3) # syntax error
0

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

print 5.__add__(3) # syntax error
1

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

print 5.__add__(3) # syntax error
2

đầu ra

print 5.__add__(3) # syntax error
3

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 số

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ã

print 5.__add__(3) # syntax error
4
  • 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

print 5.__add__(3) # syntax error
5

đầu ra

print 5.__add__(3) # syntax error
6

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ụ

print 5.__add__(3) # syntax error
7

đầu ra

print 5.__add__(3) # syntax error
6

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ố

30
30
1

đầu ra

30
30
2

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

30
30
3

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ã

30
30
4

Bây giờ bạn có thể thêm các đối tượng Trọng lượng và ints

30
30
5

đầu ra

30
30
6

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

30
30
7

đầu ra

30
30
8

Đ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

30
30
9

Điều này dẫn đến lỗi sau

30
30
8

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

__add__() method in Python

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

print 5.__add__(3) # syntax error
01

Với cái này

print 5.__add__(3) # syntax error
02

Đâ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

print 5.__add__(3) # syntax error
03

Bây giờ mã bị lỗi trước đó chạy thành công

print 5.__add__(3) # syntax error
04

đầu ra

print 5.__add__(3) # syntax error
6

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

print 5.__add__(3) # syntax error
06

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ụ

print 5.__add__(3) # syntax error
07

đầu ra

print 5.__add__(3) # syntax error
08

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)

Sự 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