Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Dunder hay Magic methods trong Python

Magic methods (phép thuật) là những phương thức cho phép chúng ta làm một số thủ thuật khá hay trong lập trình hướng đối tượng. Các phương thức này được nhận diện bằng hai gạch dưới (__) được dùng như tiền tố và hậu tố. Ví dụ, hàm như các interceptor (người chặn) được tự động gọi khi một số điều kiện nhất định được đáp ứng.

Trong Python __repr__ là hàm built-in dùng để tính toán biểu diễn chuỗi "chính thức" của một đối tượng, trong khi __str__ là hàm built-in tính toán biểu diễn chuỗi "không chính thức" của một đối tượng.

Mã ví dụ

class String:
    # magic method để khởi tạo đối tượng
    def __init__(self, string):
        self.string = string

# Driver Code
if __name__ == '__main__':
    # tạo đối tượng
    my_string = String('Python')
    # in vị trí đối tượng
    print(my_string)

Đầu ra

<__main__.String object at 0x000000BF0D411908>

Mã ví dụ

class String:
    # magic method để khởi tạo đối tượng
    def __init__(self, string):
        self.string = string
    # in đối tượng chuỗi của chúng ta
    def __repr__(self):
        return 'Object: {}'.format(self.string)

# Driver Code
if __name__ == '__main__':
    # tạo đối tượng
    my_string = String('Python')
    # in vị trí đối tượng
    print(my_string)

Đầu ra

Object: Python

Chúng ta đang cố gắng thêm một chuỗi vào nó.

Mã ví dụ

class String:
    # magic method để khởi tạo đối tượng
    def __init__(self, string):
        self.string = string
    # in đối tượng chuỗi của chúng ta
    def __repr__(self):
        return 'Object: {}'.format(self.string)

# Driver Code
if __name__ == '__main__':
    # tạo đối tượng
    my_string = String('Python')
    # nối chuỗi đối tượng String và một chuỗi
    print(my_string + ' Program')

Đầu ra

TypeError: unsupported operand type(s) for +: 'String' and 'str'

Bây giờ thêm phương thức __add__ vào lớp String

Mã ví dụ

class String:
    # magic method để khởi tạo đối tượng
    def __init__(self, string):
        self.string = string
    # in đối tượng chuỗi của chúng ta
    def __repr__(self):
        return 'Object: {}'.format(self.string)
    def __add__(self, other):
        return self.string + other

# Driver Code
if __name__ == '__main__':
    # tạo đối tượng
    my_string = String('Hello')
    # nối chuỗi đối tượng String và một chuỗi
    print(my_string + ' Python')

Đầu ra

Hello Python