Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Dunder หรือ Magic Methods ใน Python

Magic methods ที่ทำให้เราทำเทคนิคโปรแกรมมิ่งเชิงออบเจ็กต์ได้อย่างน่าสนใจ เมธอดเหล่านี้ระบุได้โดย underscore สองตัว (__) ใช้เป็น prefix และ suffix ตัวอย่างเช่น ฟังก์ชันเป็น interceptors ที่ถูกเรียกอัตโนมัติเมื่อเงื่อนไขบางอย่างเป็นจริง

ใน Python __repr__ เป็น built-in function ใช้คำนวณ "official" string representation ของออบเจ็กต์ ในขณะที่ __str__ เป็น built-in function ที่คำนวณ "informal" string representations ของออบเจ็กต์

ตัวอย่างโค้ด

class String:
    # magic method เพื่อเริ่มต้น object
    def __init__(self, string):
        self.string = string

# Driver Code
if __name__ == '__main__':
    # สร้าง object
    my_string = String('Python')
    # พิมพ์ตำแหน่ง object
    print(my_string)

ผลลัพธ์

<__main__.String object at 0x000000BF0D411908>

ตัวอย่างโค้ด

class String:
    def __init__(self, string):
        self.string = string
    # พิมพ์ string object ของเรา
    def __repr__(self):
        return 'Object: {}'.format(self.string)

if __name__ == '__main__':
    my_string = String('Python')
    print(my_string)

ผลลัพธ์

Object: Python

เราพยายามเพิ่มสตริงเข้าไป

ตัวอย่างโค้ด

class String:
    def __init__(self, string):
        self.string = string
    def __repr__(self):
        return 'Object: {}'.format(self.string)

if __name__ == '__main__':
    my_string = String('Python')
    # concatenate String object และ string
    print(my_string + ' Program')

ผลลัพธ์

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

ตอนนี้เพิ่มเมธอด __add__ ลงในคลาส String

ตัวอย่างโค้ด

class String:
    def __init__(self, string):
        self.string = string
    def __repr__(self):
        return 'Object: {}'.format(self.string)
    def __add__(self, other):
        return self.string + other

if __name__ == '__main__':
    my_string = String('Hello')
    print(my_string + ' Python')

ผลลัพธ์

Hello Python