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