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

วิธี Dunder หรือเวทย์มนตร์ใน python


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

ใน 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