__ int __ trong python là gì?

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ì 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à một chức năng mà nhiều ngôn ngữ lập trình không có, vì vậy các lập trình viên thường không tìm kiếm nó. 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

12.8
0

ĐẦU RA

12.8
1

12.8
2

ĐẦU RA

12.8
3

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

12.8
00. Đối với "-" nó là
12.8
01, 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

12.8
00 thì nó sẽ được gọi với
12.8
03, nếu không chúng ta sẽ nhận được thông báo lỗi

12.8
8

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

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

Nhìn 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

12.8
00. Lớp của chúng tôi cũng chứa các phương thức
12.8
05 và
12.8
06. 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. đơn vị

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

12.8
2

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

12.8
07 để thực hiện phép gán 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

12.8
00 và
12.8
07 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

12.8
10

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

12.8
11

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

12.8
00 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

12.8
13. 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.
12.8
00[5,Length[3, 'yd']], sẽ đưa ra một ngoại lệ. Sau đó, nó sẽ cố gọi Độ dài.
12.8
13[Chiều dài[3, "yd"], 5]. Dễ dàng nhận ra cách triển khai của
12.8
13 tương tự như của
12.8
00

9
7

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

12.8
00 trong phương pháp
12.8
13

9
8

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

12.8
00 và
12.8
13

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

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

Nhìn 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".
______113 ,

12.8
23 ,
12.8
24 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 nên chứa các giá trị bằng các 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?

Nhìn 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ư

12.8
25 [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 cho
12.8
26,
12.8
27 và
12.8
24 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

__ chỉ số __ Python là gì?

Phương thức __index__[self] của Python được gọi trên một đối tượng để lấy giá trị số nguyên được liên kết của nó . Số nguyên được trả về được sử dụng để cắt hoặc làm cơ sở cho việc chuyển đổi trong các hàm tích hợp bin[] , hex[] và oct[].

__ phương thức __ trong Python là gì?

__enter__ và __exit__ được sử dụng với khối 'with' trong python. __call__ method được sử dụng để sử dụng đối tượng làm phương thức . Phương thức __iter__ được sử dụng để tạo các đối tượng trình tạo bằng cách sử dụng đối tượng.

__ gọi __ Python là gì?

__call__ trong Python . enables Python programmers to write classes where the instances behave like functions and can be called like a function.

__ lớp __ trong Python là gì?

__class__ là một thuộc tính trên đối tượng đề cập đến lớp mà đối tượng được tạo ra từ đó . một. __lớp__ # Đầu ra.

Chủ Đề