__ Và __ con trăn
Các phương thức ma thuật là các phương thức đặc biệt trong python có hai dấu gạch dưới (dunder) ở cả hai bên của tên phương thức. Các phương pháp ma thuật chủ yếu được sử dụng để nạp chồng toán tử. Quá tải toán tử có nghĩa là cung cấp chức năng bổ sung cho toán tử, python gọi ngầm các phương thức ma thuật để cung cấp chức năng bổ sung cho nó. Ví dụ: nhân hai số nguyên có thể được thực hiện bằng toán tử nhân (2*3 = 6) và toán tử tương tự có thể được sử dụng để lặp lại chuỗi (“apple- ” * 3 = ‘apple- apple- apple’) Show
Một số ví dụ về các phương thức ma thuật là __init__, __len__, __repr__, __add__, v.v. __add__ phương pháp ma thuậtPhương thức ma thuật __add__ được sử dụng để thêm các thuộc tính của thể hiện lớp. Ví dụ: giả sử object1 là một thể hiện của lớp A và object2 là một thể hiện của lớp B và cả hai lớp này đều có một thuộc tính gọi là 'a', chứa một số nguyên. Khi thao tác object1 + object2 được thực hiện, phương thức __add__ sẽ ngầm thêm các thuộc tính của các trường hợp này như object1. một + đối tượng2. a, nếu được định nghĩa như vậy Trong đoạn mã trên, các lớp Một và Hai có một thuộc tính gọi là 'a' chứa một giá trị số nguyên. Chúng tôi xác định hai trường hợp a_instance và b_instance chứa 10 và 20 giá trị trong thuộc tính của chúng tương ứng. Khi chúng ta thực hiện thao tác a_instance + b_instance, phương thức __add__ được xác định sẽ chuyển đổi thao tác thành a_instance. a + b_instance. a dẫn đến đầu ra 30 Hoạt động chính xác có thể được thực hiện bằng cách sử dụng chuỗi class Str: def __init__(self, string_): self.string_ = string_ def __add__(self, string2): return self.string_ + string2 instance1 = Str("Hello") print(instance1 + " Folks") # Output: Hello Folks Hoạt động instance1 + ” Folks” nối hai chuỗi bằng cách ngầm thực hiện thao tác sau instance1. chuỗi_ + "Mọi người" phương pháp ma thuật __getitem__ và __setitem__Phương thức __getitem__ được sử dụng để lấy một mục từ thuộc tính của trường hợp được gọi. __getitem__ thường được sử dụng với các thùng chứa như danh sách, tuple, v.v. class A: def __init__(self, item): self.item = item def __getitem__(self, index): return self.item[index] a = A([1, 2, 3]) print(f"First item: {a[0]}") print(f"Second item: {a[1]}") print(f"Third item: {a[2]}") # Output: # First item: 1 # Second item: 2 # Third item: 3 Phương thức __setitem__ được sử dụng để đặt mục thành một chỉ mục cụ thể của thuộc tính của phiên bản được gọi. Tương tự như __getitem__, __setitem__ cũng được sử dụng với các thùng chứa class SetItemExample: def __init__(self, item): self.item = item def __setitem__(self, index, item1): self.item[index] = item1 setitem_instance = SetItemExample([1, 2, 3]) print(f"Items before setting: {setitem_instance.item}") setitem_instance[1] = 5 print(f"Items after setting: {setitem_instance.item}") # Output # Items before setting: [1, 2, 3] # Items after setting: [1, 5, 3] __repr__ phương pháp ma thuậtPhương thức ma thuật __repr__ được sử dụng để biểu diễn thể hiện của một lớp trong chuỗi. Khi chúng ta cố gắng in đối tượng của một lớp, phương thức __repr__ được gọi ngầm để trả về một chuỗi class ReprExample: def __init__(self, a, b, c): self.a = a self.b = b self.c = c def __repr__(self): return f"ReprExample(a={self.a}, b={self.b}, c={self.c})" repr_instance = ReprExample(1, 2, 3) print(repr_instance) # Output # ReprExample(a=1, b=2, c=3) Lớp trên nhận ba tham số nguyên là a, b và c. Chúng tôi tạo một phiên bản bằng cách sử dụng ReprExample(1, 2, 3) và nếu chúng tôi in phiên bản, nó sẽ in chuỗi được xác định trong __repr__ __len__ phương pháp ma thuậtPhương pháp ma thuật __len__ được sử dụng để tìm độ dài của các thuộc tính thể hiện. Khi chúng ta sử dụng len(instance), nó trả về độ dài của thuộc tính instance thường là các thùng chứa class LenExample: def __init__(self, item): self.item = item def __len__(self): return len(self.item) len_instance = LenExample([1, 2, 3]) print(len(len_instance)) # Output: 3 Khi chúng ta gọi phương thức len(), độ dài của danh sách có tên mục được trả về được xác định bên trong phương thức __len__ Các phương pháp ma thuật __lt__, __gt__, __le__, __ge__, __eq__ và __ne__Toán tử so sánh có thể được sử dụng để so sánh giữa các thuộc tính của đối tượng. Các phương thức khả dụng là __lt__, __gt__, __le__, __ge__, __eq__ và __ne__ lần lượt thực hiện các phép toán nhỏ hơn, lớn hơn, nhỏ hơn hoặc bằng, lớn hơn hoặc bằng, bằng và không bằng class Comparison: def __init__(self, a): self.a = a def __lt__(self, object2): return self.a < object2.a def __gt__(self, object2): return self.a > object2.a def __le__(self, object2): return self.a <= object2.a def __ge__(self, object2): return self.a >= object2.a def __eq__(self, object2): return self.a == object2.a def __ne__(self, object2): return self.a != object2.a a = Comparison(1) b = Comparison(2) print( a < b, a > b, a <= b, a >= b, a == b, a != b ) # Output # True False True False False True Các trường hợp a và b chứa một thuộc tính có tên là 'a' chứa các giá trị nguyên tương ứng là 1 và 2 Khi chúng ta gọi các hoạt động sau đây,
các phương thức ma thuật được gọi ngầm bởi python thực hiện các thao tác sau thay vì các thao tác được đề cập ở trên,
Các hoạt động tiềm ẩn này được xác định bên trong các phương thức ma thuật trả về các giá trị boolean __contains__ phương pháp ma thuậtPhương thức __contains__ được gọi khi sử dụng toán tử thành viên 'in'. Khi chúng ta muốn kiểm tra xem một phần tử có trong các thuộc tính của đối tượng thường là bộ chứa (danh sách, bộ) hay không, chúng ta có thể sử dụng phương thức __contains__ class ContainsExample: def __init__(self, items): self.items = items def __contains__(self, item): return item in self.items contains_instance = ContainsExample([1, 2, 3, 4, 5]) print(4 in contains_instance) Đoạn mã trên sử dụng phương thức __contains__ để tìm xem một số nguyên có trong danh sách các số nguyên hay không. Trong đoạn mã trên, chúng tôi đã kiểm tra xem số nguyên 4 có trong danh sách các số nguyên là một thuộc tính của lớp ChứaExample hay không __enter__ và __exit__ phương pháp ma thuậtCác phương thức __enter__ và __exit__ được sử dụng cùng với khối 'with' trong python. Khối 'with' trong python được sử dụng để mở và đóng đối tượng tệp hoặc bất kỳ đối tượng nào khác có phương thức đóng class WriteFile: def __init__(self, file_name): self.file_name = file_name self.file = None def log(self, text): self.file.write(text+'n') def __enter__(self): self.file = open(self.file_name, "a+") return self def __exit__(self, exc_type, exc_val, exc_tb): self.file.close() with WriteFile(r"filename.txt") as log_file: log_file.log("Log Test 1") log_file.log("Log Test 2") Khi lớp được gọi với tên tệp 'filename. txt' thì phương thức __enter__ ngầm tạo một tệp văn bản. Sau khi thực hiện các lệnh trong tệp văn bản, phương thức __exit__ được gọi ngầm để đóng đối tượng tệp. Bằng cách này, chúng ta có thể sử dụng các phương thức ma thuật __enter__ và __exit__. Các phương thức này cũng có thể được sử dụng để mở và đóng kết nối cơ sở dữ liệu __call__ phương pháp ma thuật__call__ phương thức ma thuật được gọi khi thể hiện của một lớp được gọi. Thay vì viết một phương thức khác để thực hiện một số thao tác nhất định, chúng ta có thể sử dụng phương thức __call__ để gọi trực tiếp từ tên đối tượng ________số 8_______Ví dụ call_example có thể được gọi trực tiếp như một phương thức vì chúng ta đã định nghĩa phương thức __call__ trong lớp. Phương thức __call__ trong ví dụ này nhận giá trị có tên b và nhân với thuộc tính 'val' của lớp dẫn đến kết quả là 30 trong ví dụ trên __iter__ phương pháp ma thuậtPhương thức __iter__ được sử dụng để cung cấp một đối tượng trình tạo cho thể hiện được cung cấp. Chúng ta có thể sử dụng phương thức iter() và next() để tận dụng phương thức __iter__ class Squares: def __init__(self, start, stop): self.start = start self.stop = stop def __iter__(self): for value in range(self.start, self.stop + 1): yield value ** 2 i = iter(Squares(1, 3)) print(next(i)) print(next(i)) print(next(i)) # Output: 1 4 9 Trong đoạn mã trên, chúng ta sẽ tìm bình phương của các giá trị giữa phạm vi được cung cấp (bắt đầu và dừng). Khi chúng ta gọi phương thức iter(Squares(1, 3)), phương thức __iter__ được gọi, đây là phương thức mang lại bình phương của các giá trị giữa phạm vi được cung cấp. Trong ví dụ của chúng tôi, chúng tôi sử dụng phạm vi từ 1 đến 3 để đầu ra sẽ là 1, 4 và 9 nếu chúng tôi gọi phương thức next() Tóm lược
Phương tiện hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định của Tác giả __ __ phương thức trong Python là gì?__enter__ và __exit__ phương pháp ma thuật
. Khối 'with' trong python được dùng để mở và đóng đối tượng tệp hoặc bất kỳ đối tượng nào khác có phương thức đóng .
__ chứa __ trong Python là gì?Chuỗi Python __contains__() là một phương thức thể hiện và trả về giá trị boolean Đúng hoặc Sai tùy thuộc vào việc đối tượng chuỗi có chứa đối tượng chuỗi đã chỉ định hay không. Note that the Python string contains() method is case sensitive.
__ 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.
__ cuộc gọi __ trong Python là gì?__call__ trong Python
. Khi thể hiện được gọi là một hàm; . ) là viết tắt của x. enables Python programmers to write classes where the instances behave like functions and can be called like a function. When the instance is called as a function; if this method is defined, x(arg1, arg2, ...) is a shorthand for x. |