สำหรับวัตถุประสงค์ของการห่อหุ้มข้อมูล ภาษาเชิงวัตถุส่วนใหญ่ใช้เมธอด getters และ setters เนื่องจากเราต้องการซ่อนแอตทริบิวต์ของคลาสอ็อบเจ็กต์จากคลาสอื่น เพื่อไม่ให้มีการแก้ไขข้อมูลโดยไม่ได้ตั้งใจโดยวิธีการในคลาสอื่น
ตามชื่อที่แนะนำ getters คือวิธีที่ช่วยเข้าถึงแอตทริบิวต์ส่วนตัวหรือรับค่าของแอตทริบิวต์ส่วนตัวและ setters คือวิธีการที่ช่วยเปลี่ยนหรือตั้งค่าของแอตทริบิวต์ส่วนตัว
การเข้าถึงแอตทริบิวต์ส่วนตัว
ด้านล่างเราเขียนโค้ดเพื่อสร้างคลาส เริ่มต้น และเข้าถึงตัวแปรโดยไม่ต้องสร้างเมธอดเพิ่มเติม
ตัวอย่าง
class year_graduated: def __init__(self, year=0): self._year = year # Instantiating the class grad_obj = year_graduated() #Printing the object print(grad_obj) #Printing the object attribute print(grad_obj.year)
ผลลัพธ์
การรันโค้ดด้านบนทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
<__main__.year_graduated object at 0x00F2DD50> 0
แม้ว่าคำสั่งการพิมพ์ครั้งแรกจะให้รายละเอียดของวัตถุที่สร้างขึ้น แต่วัตถุการพิมพ์ที่สองจะให้ค่าเริ่มต้นของแอตทริบิวต์ส่วนตัว
การใช้ getters และ setters
ในตัวอย่างด้านล่าง เราจะสร้างคลาส เริ่มต้นคือ จากนั้นเพิ่มเมธอด getter และ setter ให้กับแต่ละรายการ จากนั้นเข้าถึงตัวแปรในเมธอดเหล่านี้โดยสร้างอินสแตนซ์ของคลาสและใช้เมธอด getter และ setter ดังนั้นคุณจึงสามารถซ่อนตรรกะของคุณไว้ในเมธอด setter ได้
ตัวอย่าง
class year_graduated: def __init__(self, year=0): self._year = year # getter method def get_year(self): return self._year # setter method def set_year(self, a): self._year = a grad_obj = year_graduated() # Before using setter print(grad_obj.get_year()) # After using setter grad_obj.set_year(2019) print(grad_obj._year)
ผลลัพธ์
การเรียกใช้โค้ดด้านบนทำให้เราได้ผลลัพธ์ดังต่อไปนี้:
0 2019
ทำให้แอตทริบิวต์เป็นส่วนตัว
ในตัวอย่างต่อไป เราจะเห็นวิธีการทำให้เมธอดเป็นส่วนตัวเพื่อไม่ให้ตัวแปรที่อยู่ในนั้นถูกจัดการโดยฟังก์ชันการเรียกภายนอก สามารถจัดการได้โดยฟังก์ชันภายในคลาสเท่านั้น พวกเขากลายเป็นส่วนตัวโดยนำหน้าด้วยขีดล่าง 2 อัน
ตัวอย่าง
class year_graduated: def __init__(self, year=32): self._year = year # make the getter method def get_year(self): return self.__year # make the setter method def set_year(self, a): self.__year = a grad_obj = year_graduated() print(grad_obj._year) # Before using setter print(grad_obj.get_year()) # # # After using setter grad_obj.set_year(2019) print(grad_obj._year)
ผลลัพธ์
การเรียกใช้โค้ดด้านบนทำให้เราได้ผลลัพธ์ดังต่อไปนี้:
32 AttributeError: 'year_graduated' object has no attribute '_year_graduated__year'
การอ่านค่าจากเมธอดส่วนตัว
ไม่ เราสามารถเข้าถึงค่าแอตทริบิวต์ส่วนตัวได้โดยใช้วิธีคุณสมบัติและไม่ใช้วิธีรับ
ตัวอย่าง
class year_graduated: def __init__(self, year=32): self._year = year @property def Aboutyear(self): return self.__year @Aboutyear.setter def Aboutyear(self, a): self.__year = a grad_obj = year_graduated() print(grad_obj._year) grad_obj.year = 2018 print(grad_obj.year)
ผลลัพธ์
การเรียกใช้โค้ดด้านบนทำให้เราได้ผลลัพธ์ดังต่อไปนี้:
32 2018