__Iadd__ Con trăn

Cái gọi là phương pháp ma thuật không liên quan gì đến ma thuật. Bạn đã thấy chúng trong các chương trước của hướng dẫn của chúng tôi. Chúng là những phương thức đặc biệt với tên cố định. Chúng là những phương thức với cú pháp vụng về này, tôi. e. dấu gạch dưới kép ở đầu và cuối. Họ cũng khó nói về. Làm thế nào để bạn phát âm hoặc nói một tên phương thức như

12.8
4? . "Dấu gạch dưới kép init dấu gạch dưới kép" tốt hơn nhiều, nhưng cách lý tưởng là "dunder init dunder" Đó là lý do tại sao các phương thức ma thuật đôi khi được gọi là phương thức dunder

Vậy điều kỳ diệu về phương pháp

12.8
4 là gì? . Lời kêu gọi được thực hiện đằng sau hậu trường. Khi bạn tạo một thể hiện x của một lớp A với câu lệnh "x = A[]", Python sẽ thực hiện các lệnh gọi cần thiết tới
12.8
6 và
12.8
4

Ở phần cuối của chương hướng dẫn này, chúng tôi sẽ giới thiệu phương pháp

12.8
8. Nó bị bỏ qua bởi nhiều người mới bắt đầu và thậm chí cả những lập trình viên cao cấp của Python. Đây là chức năng mà nhiều ngôn ngữ lập trình không có nên các lập trình viên thường không tìm kiếm. Phương thức
12.8
8 cho phép các lập trình viên Python viết các lớp trong đó các thể hiện hoạt động giống như các hàm. Cả hai chức năng và các thể hiện của các lớp như vậy được gọi là có thể gọi được

Chúng ta đã gặp khái niệm nạp chồng toán tử nhiều lần trong hướng dẫn này. Chúng tôi đã sử dụng dấu cộng để thêm các giá trị số, để nối các chuỗi hoặc kết hợp các danh sách

4 + 5

ĐẦU RA

9

________số 8_______

ĐẦU RA

12.8

"Peter" + " " + "Pan"

ĐẦU RA

'Peter Pan'

[3,6,8] + [7,11,13]

ĐẦU RA

[3, 6, 8, 7, 11, 13]

Thậm chí có thể quá tải toán tử "+" cũng như tất cả các toán tử khác cho mục đích của lớp của riêng bạn. Để làm điều này, bạn cần hiểu cơ chế cơ bản. Có một phương pháp đặc biệt [hoặc một "ma thuật"] cho mọi ký hiệu toán tử. Phương pháp kỳ diệu cho dấu "+" là phương pháp

"Peter" + " " + "Pan"
0. Đối với "-" nó là
"Peter" + " " + "Pan"
1, v.v. Chúng tôi có một danh sách đầy đủ tất cả các phương pháp ma thuật ở xa hơn một chút

Cơ chế hoạt động như thế này. Nếu chúng ta có biểu thức "x + y" và x là một thể hiện của lớp K, thì Python sẽ kiểm tra định nghĩa lớp của K. Nếu K có phương thức

"Peter" + " " + "Pan"
0 thì nó sẽ được gọi với
"Peter" + " " + "Pan"
3, nếu không chúng ta sẽ nhận được thông báo lỗi

Traceback [most recent call last]:
  File "", line 1, in 
TypeError: unsupported operand type[s] for +: 'K' and 'K'

Đào tạo Python trực tiếp

Thưởng thức trang này?

Thấy. Tổng quan về các khóa học Python trực tiếp

đăng ký tại đây

Tổng quan về các phương pháp ma thuật

toán tử nhị phân

OperatorMethod+object.__add__[self, other]-object.__sub__[self, other]*object.__mul__[self, other]//object.__floordiv__[self, other]/object.__truediv__[self, other]%object.__mod__[self, other]**object.__pow__[self, other[, modulo]]object.__rshift__[self, other]&object.__and__[self, other]^object.__xor__[self, other]|object.__or__[self, other]

Bài tập mở rộng

OperatorMethod+=object.__iadd__[self, other]-=object.__isub__[self, other]*=object.__imul__[self, other]/=object.__idiv__[self, other]//=object.__ifloordiv__[self, other]%=object.__imod__[self, other]**=object.__ipow__[self, other[, modulo]]=object.__irshift__[self, other]&=object.__iand__[self, other]^=object.__ixor__[self, other]|=object.__ior__[self, other]

toán tử đơn nguyên

Toán tửMethod-object. __neg__[bản thân]+đối tượng. đối tượng __pos__[self]abs[]. __abs__[bản thân]~đối tượng. đối tượng __invert__[self]complex[]. đối tượng __complex__[self]int[]. đối tượng __int__[self]long[]. đối tượng __long__[self]float[]. đối tượng __float__[self]oct[]. đối tượng __oct__[self]hex[]. __hex__[tự

Toán tử so sánh

OperatorMethodobject.__gt__[self, other]

lớp ví dụ. Chiều dài

Chúng tôi sẽ trình bày lớp Độ dài và cách bạn có thể nạp chồng toán tử "+" cho lớp của riêng bạn. Để làm điều này, chúng ta phải quá tải phương thức

"Peter" + " " + "Pan"
0. Lớp của chúng tôi cũng chứa các phương thức
"Peter" + " " + "Pan"
5 và
"Peter" + " " + "Pan"
6. Các thể hiện của lớp Độ dài chứa thông tin về độ dài hoặc khoảng cách. Các thuộc tính của một thể hiện là tự. giá trị và bản thân. đoàn kết

Lớp này cho phép chúng ta tính toán các biểu thức với các đơn vị hỗn hợp như thế này

2.56 m + 3 yd + 7.8 in + 7.03 cm

Lớp học có thể được sử dụng như thế này

9
0

ĐẦU RA

9
1

Danh sách của lớp

9
2

ĐẦU RA

9
3

Chúng tôi sử dụng phương pháp

"Peter" + " " + "Pan"
7 để thực hiện bài tập mở rộng

9
4

Bây giờ chúng tôi có khả năng viết các bài tập sau

9
5

Chúng tôi đã thêm 1 mét vào ví dụ trên bằng cách viết "x += Chiều dài[1]]". Chắc chắn, bạn sẽ đồng ý với chúng tôi rằng sẽ thuận tiện hơn nếu chỉ viết "x += 1" thay vì. Chúng tôi cũng muốn xử lý các biểu thức như "Length[5,"yd"] + 4. 8" tương tự. Vì vậy, nếu ai đó sử dụng kiểu int hoặc float, lớp của chúng ta sẽ tự động lấy kiểu đó cho "mét" và chuyển đổi nó thành đối tượng Độ dài. Thật dễ dàng để điều chỉnh phương pháp

"Peter" + " " + "Pan"
0 và
"Peter" + " " + "Pan"
7 của chúng tôi cho nhiệm vụ này. Tất cả những gì chúng ta phải làm là kiểm tra loại tham số "khác"

9
6

Đặt cược an toàn là nếu ai đó làm việc với việc cộng các số nguyên và di chuyển từ phía bên phải trong một thời gian, thì người đó sẽ muốn có số nguyên tương tự từ phía bên trái. Điều gì sẽ xảy ra nếu chúng ta thực thi dòng mã sau

'Peter Pan'
0

Chúng tôi sẽ nhận được một ngoại lệ

'Peter Pan'
1

Tất nhiên, vế trái phải thuộc loại "Length", vì nếu không thì Python sẽ cố gắng áp dụng phương thức

"Peter" + " " + "Pan"
0 từ int, phương thức này không thể đối phó với các đối tượng Độ dài làm đối số thứ hai

Python cũng cung cấp giải pháp cho vấn đề này. Đó là phương pháp

'Peter Pan'
3. Nó hoạt động như thế này. Python cố gắng đánh giá biểu thức "5 + Độ dài [3, 'yd']". Đầu tiên nó gọi int.
"Peter" + " " + "Pan"
0[5,Length[3, 'yd']], sẽ đưa ra một ngoại lệ. Sau đó, nó sẽ cố gọi Độ dài.
'Peter Pan'
3[Chiều dài[3, "yd"], 5]. Dễ dàng nhận ra rằng việc triển khai của
'Peter Pan'
3 tương tự như của
"Peter" + " " + "Pan"
0

9
7

Nên sử dụng phương pháp

"Peter" + " " + "Pan"
0 trong phương pháp
'Peter Pan'
3

9
8

Sơ đồ sau đây minh họa mối quan hệ giữa

"Peter" + " " + "Pan"
0 và
'Peter Pan'
3

Đào tạo Python trực tiếp

Thưởng thức trang này?

Thấy. Tổng quan về các khóa học Python trực tiếp

Các khóa học trực tuyến sắp tới

Khóa học nâng cao chuyên sâu

Lập trình hướng đối tượng với Python

đăng ký tại đây

Các lớp tiêu chuẩn như các lớp cơ sở

Có thể sử dụng các lớp tiêu chuẩn - như int, float, dict hoặc danh sách - làm lớp cơ sở.

Chúng tôi mở rộng lớp danh sách bằng cách thêm một phương thức đẩy

9
9

ĐẦU RA

3.8 + 9
0

Điều này có nghĩa là tất cả các toán tử gán mở rộng và nhị phân được giới thiệu trước đó cũng tồn tại trong phiên bản "đảo ngược"

'Peter Pan'
3 ,
[3,6,8] + [7,11,13]
3 ,
[3,6,8] + [7,11,13]
4 v.v.

bài tập

bài tập 1

Viết một lớp với tên Ccy, tương tự như lớp Length đã định nghĩa trước đó. Ccy phải chứa các giá trị bằng nhiều loại tiền tệ khác nhau, e. g. "EUR", "GBP" hoặc "USD". Một phiên bản nên chứa số lượng và đơn vị tiền tệ. Lớp học, bạn sẽ thiết kế như một bài tập, có thể được mô tả tốt nhất với phiên ví dụ sau

3.8 + 9
1

Đào tạo Python trực tiếp

Thưởng thức trang này?

Thấy. Tổng quan về các khóa học Python trực tiếp

đăng ký tại đây

Giải pháp cho bài tập của chúng tôi

Giải bài tập 1

3.8 + 9
2

ĐẦU RA

3.8 + 9
3

3.8 + 9
4

ĐẦU RA

3.8 + 9
5

Một khía cạnh thú vị khác của lớp chuyển đổi tiền tệ này trong Python có thể được hiển thị, nếu chúng ta thêm phép nhân. Bạn sẽ dễ dàng hiểu rằng thật vô nghĩa khi cho phép các biểu thức như

[3,6,8] + [7,11,13]
5 [hoặc trong ký hiệu tiền tố. "€12. 4 đô la 3. 4"], nhưng hoàn toàn hợp lý khi đánh giá "3 4. 54 €. Bạn có thể tìm thấy lớp công cụ chuyển đổi tiền tệ mới với các phương thức mới được thêm vào cho
[3,6,8] + [7,11,13]
6,
[3,6,8] + [7,11,13]
7 và
[3,6,8] + [7,11,13]
4 trong danh sách sau

3.8 + 9
6

ĐẦU RA

3.8 + 9
7

Giả sử rằng bạn đã lưu lớp dưới tên currency_converter, bạn có thể sử dụng nó theo cách sau trong trình bao lệnh

__ ne __ trong Python là gì?

Phương thức __repr__ được sử dụng để in đối tượng dưới dạng chuỗi. Phương thức __len__ được sử dụng để tìm độ dài của các thuộc tính của đối tượng. Các phương thức __lt__, __gt__, __le__, __ge__, __eq__ và __ne__ được dùng để so sánh các thuộc tính của đối tượng .

Phương pháp ma thuật Python là gì?

Các phương thức ma thuật trong Python là các phương thức đặc biệt bắt đầu và kết thúc bằng dấu gạch dưới kép . Chúng còn được gọi là phương pháp dunder. Các phương thức ma thuật không có nghĩa là bạn phải gọi trực tiếp, nhưng việc gọi xảy ra bên trong lớp trên một hành động nhất định.

Phương thức dunder trong Python là gì?

Trong Python, các phương thức dunder là các phương thức cho phép các thể hiện của một lớp tương tác với các hàm và toán tử tích hợp sẵn của ngôn ngữ . Từ "dunder" bắt nguồn từ "dấu gạch dưới kép", bởi vì tên của các phương thức dunder bắt đầu và kết thúc bằng hai dấu gạch dưới, ví dụ __str__ hoặc __add__.

Toán tử is trong Python là gì?

Toán tử nhận dạng . Điều này không giống với đẳng thức, có nghĩa là hai toán hạng tham chiếu đến các đối tượng chứa cùng một dữ liệu nhưng không nhất thiết phải là cùng một đối tượng. determine whether the given operands have the same identity—that is, refer to the same object. This is not the same thing as equality, which means the two operands refer to objects that contain the same data but are not necessarily the same object.

Chủ Đề