เมธอดเวทย์มนตร์ที่ช่วยให้เราทำลูกเล่นที่ค่อนข้างประณีตในการเขียนโปรแกรมเชิงวัตถุ วิธีการเหล่านี้ระบุด้วยเครื่องหมายขีดล่าง (__) สองตัวที่ใช้เป็นคำนำหน้าและส่วนต่อท้าย ตัวอย่างเช่น ทำหน้าที่เป็นตัวสกัดกั้นที่จะถูกเรียกโดยอัตโนมัติเมื่อตรงตามเงื่อนไขที่กำหนด
ใน python __repr__ เป็นฟังก์ชันในตัวที่ใช้คำนวณการแสดงสตริง "เป็นทางการ" ของอ็อบเจ็กต์ ในขณะที่ __str__ เป็นฟังก์ชันในตัวที่คำนวณการแทนค่าสตริง "ไม่เป็นทางการ" ของอ็อบเจ็กต์
โค้ดตัวอย่าง
class String: # magic method to initiate object def __init__(self, string): self.string = string # Driver Code if __name__ == '__main__': # object creation my_string = String('Python') # print object location print(my_string)
ผลลัพธ์
<__main__.String object at 0x000000BF0D411908>
โค้ดตัวอย่าง
class String: # magic method to initiate object def __init__(self, string): self.string = string # print our string object def __repr__(self): return 'Object: {}'.format(self.string) # Driver Code if __name__ == '__main__': # object creation my_string = String('Python') # print object location print(my_string)
ผลลัพธ์
Object: Python
เรากำลังพยายามเพิ่มสตริงเข้าไป
โค้ดตัวอย่าง
class String: # magic method to initiate object def __init__(self, string): self.string = string # print our string object def __repr__(self): return 'Object: {}'.format(self.string) # Driver Code if __name__ == '__main__': # object creation my_string = String('Python') # concatenate String object and a string print(my_string + ' Program')
ผลลัพธ์
TypeError: unsupported operand type(s) for +: 'String' and 'str'
เพิ่มเมธอด __add__ ให้กับคลาสสตริง
โค้ดตัวอย่าง
class String: # magic method to initiate object def __init__(self, string): self.string = string # print our string object def __repr__(self): return 'Object: {}'.format(self.string) def __add__(self, other): return self.string + other # Driver Code if __name__ == '__main__': # object creation my_string = String('Hello') # concatenate String object and a string print(my_string +' Python')
ผลลัพธ์
Hello Python