Python

แบ่งประเภทได้เป็น Public, Protected และ Private โดยPython ใช้สัญลักษณ์ ‘_’ เพื่อกำหนดการควบคุมการเข้าถึงสำหรับข้อมูลสมาชิกเฉพาะหรือฟังก์ชันสมาชิกของคลาส ตัวระบุการเข้าถึงใน Python มีบทบาทสำคัญในการรักษาความปลอดภัยข้อมูลจากการเข้าถึงโดยไม่ได้รับอนุญาตและป้องกันไม่ให้ข้อมูลถูกใช้ประโยชน์ แต่สิ่งนี้ไม่เหมือนกับภาษาอื่น ๆ เช่น Java และ C++ เนื่องจาก Python ใช้แนวคิดของ Name Mangling เพื่อบรรลุการซ่อนข้อมูล

1. Public :ในทางทฤษฎี วิธีการและฟิลด์สาธารณะสามารถเข้าถึงได้โดยตรงจากคลาสใดๆ ก็ได้ สมาชิกของคลาสที่ประกาศเป็นpublicสามารถเข้าถึงได้ง่ายจากทุกส่วนของโปรแกรม โดยค่าเริ่มต้น สมาชิกข้อมูลและฟังก์ชันสมาชิกทั้งหมดของคลาสจะเป็นpublic

# program to illustrate public access modifier in a class


class Geek:

    # constructor
    def __init__(self, name, age):

        # public data members
        self.geekName = name
        self.geekAge = age

    # public member function
    def displayAge(self):

        # accessing public data member
        print("Age: ", self.geekAge)


# creating object of the class
obj = Geek("R2J", 20)

# finding all the fields and methods which are present inside obj
print("List of fields and methods inside obj:", dir(obj))

# accessing public data member
print("Name:", obj.geekName)

# calling public member function of the class
obj.displayAge()

เรากำลังใช้ฟังก์ชัน dir() เพื่อแสดงรายชื่อตัวแปรสมาชิกและฟังก์ชันทั้งหมดของอ็อบเจ็กต์ Geeks ที่สามารถเข้าถึงได้ เราสามารถเห็น geekName, geekAge, displayAge และวิธีการในตัวอื่นๆ เช่น str, sizeof เป็นต้น ได้อย่างชัดเจน ในโปรแกรมด้านบน geekName และ geekAge ควรจะเป็นสมาชิกข้อมูลสาธารณะ และวิธี displayAge() เป็นฟังก์ชันสมาชิกสาธารณะของคลาส Geek สมาชิกข้อมูลเหล่านี้ของคลาส Geek สามารถเข้าถึงได้จากทุกที่ในโปรแกรม เนื่องจากพวกเขาอยู่ในรายการที่ส่งคืนโดย dir() ตามที่เป็นอยู่

2.Protected : ในทางทฤษฎี วิธีการและฟิลด์ที่ได้รับการป้องกันสามารถเข้าถึงได้ภายในคลาสเดียวกับที่ประกาศและคลาสย่อยของคลาสนั้น สมาชิกของคลาสที่ประกาศเป็น protected จะสามารถเข้าถึงได้เฉพาะภายในคลาสที่ประกาศและซับคลาสเท่านั้น ส่วน protected field or method จะปฏิบัติตามข้อตกลงเฉพาะโดยส่วนใหญ่แล้วจะเพิ่มคำนำหน้าให้กับตัวแปรหรือชื่อฟังก์ชัน โดยทั่วไป จะใช้เครื่องหมายขีดล่าง “_” เพียงตัวเดียวเพื่ออธิบายสมาชิกหรือเมธอดข้อมูลที่ได้รับการป้องกันของคลาส python interpreterจะไม่ถือว่าข้อมูลดังกล่าวเป็นข้อมูลที่ได้รับการป้องกันเหมือนกับภาษาอื่นๆ แต่จะระบุให้โปรแกรมเมอร์ทราบเท่านั้น

ในโปรแกรมด้านบน _name, _roll และ _branch เป็นสมาชิกข้อมูลที่ได้รับการป้องกัน และเมธอด _displayRollAndBranch() เป็นวิธีที่ได้รับการป้องกันของซูเปอร์คลาส Student เมธอด displayDetails() เป็นฟังก์ชันสมาชิกสาธารณะของคลาส Geek ซึ่งได้มาจากคลาส Student เมธอด displayDetails() ในคลาส Geek เข้าถึงสมาชิกข้อมูลที่ได้รับการป้องกันของคลาส Student

เราสามารถเข้าถึงสมาชิกที่ได้รับการป้องกันของคลาส Student ได้โดยตรงโดยระบุชื่อที่ถูกต้องของฟิลด์และวิธีการ เช่น เพิ่มเครื่องหมายขีดล่างไว้ข้างหน้า เนื่องจากประกาศโดยใช้ชื่อนั้น นอกจากนี้ เรายังเห็นได้ว่าฟิลด์และวิธีการที่ได้รับการประกาศเหล่านี้สามารถเรียกได้ เนื่องจากมีอยู่ในรายการที่ส่งคืนโดยฟังก์ชัน dir() หากเราพยายามเข้าถึงโดยใช้ชื่อธรรมดา เช่น stu.name และ stu.displayRollAndBranch() เราจะพบข้อผิดพลาดเนื่องจากไม่ได้บันทึกโดยใช้ชื่อนั้น เครื่องหมายขีดล่างถูกใช้เป็นหลัก เนื่องจากอักขระอื่นๆ เช่น “$”, “-“, “&” เป็นต้น ไม่สามารถปรากฏในตัวแปรหรือชื่อฟังก์ชันได้

3.Private :ในทางทฤษฎี วิธีการและฟิลด์ส่วนตัวสามารถเข้าถึงได้ภายในคลาสเดียวกับที่ประกาศเท่านั้น โดยสามารถเข้าถึงได้ภายในคลาสเท่านั้น ตัวปรับเปลี่ยนการเข้าถึงแบบส่วนตัวคือตัวปรับเปลี่ยนการเข้าถึงที่ปลอดภัยที่สุด สมาชิกข้อมูลของคลาสจะถูกประกาศให้เป็นแบบส่วนตัวโดยการเพิ่มเครื่องหมายขีดล่างสองอัน ‘__’ ไว้ข้างหน้าสมาชิกข้อมูลของคลาสนั้น

โปรแกรมด้านบน __name, __roll และ __branch เป็นสมาชิกส่วนตัว วิธี __displayDetails() เป็นฟังก์ชันสมาชิกส่วนตัว (สามารถเข้าถึงได้ภายในคลาสเท่านั้น) และวิธี accessPrivateFunction() เป็นฟังก์ชันสมาชิกสาธารณะของคลาส Geek ซึ่งสามารถเข้าถึงได้จากทุกที่ภายในโปรแกรม วิธี accessPrivateFunction() เข้าถึงสมาชิกส่วนตัวของคลาส Geek

เราสามารถเข้าถึงสมาชิกส่วนตัวของคลาสภายนอกคลาสได้ เราไม่สามารถเรียก obj.__name, obj.__age, obj.__branch และ obj.__displayDetails() โดยตรงได้เนื่องจากจะเกิดข้อผิดพลาด เราจะสังเกตได้ว่าในรายการฟิลด์ที่เรียกได้และเมธอด __name จะถูกบันทึกเป็น _Geek__name, __age จะถูกบันทึกเป็น _Geek__age, __branch จะถูกบันทึกเป็น _Geek__branch และ displayDetails() จะถูกบันทึกเป็น _Geek__displayDetails() การแปลงนี้เรียกว่า name mangling ซึ่งอินเทอร์พรีเตอร์ของ Python จะแปลงเมมเบอร์ที่ขึ้นต้นด้วยเครื่องหมายขีดล่างสองตัวให้เป็น _ โดยอัตโนมัติ ดังนั้น เราจึงยังสามารถเรียกเมมเบอร์ข้อมูลที่เป็นส่วนตัวทั้งหมดของคลาสได้โดยใช้ข้อตกลงข้างต้น

ต่อไปนี้คือโปรแกรมที่จะแสดงการใช้ตัวปรับแต่งการเข้าถึงทั้งสามตัวข้างต้น (public, protected และ private) ของคลาสใน Python

ด้านบน วิธี accessProtectedMembers() เป็นฟังก์ชันสมาชิกสาธารณะของคลาส Sub ซึ่งเข้าถึงวิธี _displayProtectedMembers() ซึ่งเป็นฟังก์ชันสมาชิกที่ได้รับการป้องกันของคลาส Super และวิธี accessPrivateMembers() เป็นฟังก์ชันสมาชิกสาธารณะของคลาส Super ซึ่งเข้าถึงวิธี __displayPrivateMembers() ซึ่งเป็นฟังก์ชันสมาชิกส่วนตัวของคลาส Super

ในทางเนื่องจาก Python ไม่ปฏิบัติตามคำจำกัดความในตำราเรียนเกี่ยวกับข้อกำหนดดังกล่าว ในทางกลับกัน มันขึ้นอยู่กับโปรแกรมเมอร์/องค์กร รวมถึงฟีเจอร์เฉพาะของ Python ที่เรียกว่า name mangling ซึ่งเราสามารถเลียนแบบการรักษาความปลอดภัยจริงที่ได้รับจากตัวปรับแต่งการเข้าถึงได้

Last updated