__ 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’)

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ật

Phươ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ật

Phươ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ật

Phươ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,

  • a < b,
  • một > b,
  • một <= b,
  • a >= b,
  • một == b,
  • một. = b

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,

  • a. a < b. một,
  • a. một > b. một,
  • a. một <= b. một,
  • a. a >= b. một,
  • a. một == b. một,
  • a. một. = b. a

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ật

Phươ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ật

Cá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ật

Phươ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

  • Trong bài đăng này, chúng ta đã thấy cách tận dụng việc sử dụng các phương thức ma thuật trong python để cung cấp các chức năng bổ sung cho các đối tượng lớp mà không cần bất kỳ chi phí nào
  • Phương thức __add__ được sử dụng để thêm thuộc tính của hai đối tượng
  • Các phương thức __getitem__ và __setitem__ được sử dụng để đặt và lấy các mục thuộc thuộc tính vùng chứa của đối tượng
  • 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 sử dụng để so sánh các thuộc tính của đối tượng
  • Phương thức __contains__ được sử dụng để xác thực tư cách thành viên
  • Các phương thức __enter__ và __exit__ được sử dụng với khối 'with' trong python
  • Phương thức __call__ đượ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

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.