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

Private Variables ใน Python


ในทางปฏิบัติจริง Python ไม่มีอะไรที่เรียกว่า private member variable ใน Python จริงๆ แต่การเพิ่ม underscore สองตัว (__) นำหน้าทำให้ตัวแปรหรือเมธอดเป็น private เป็นข้อตกลงที่ใช้โดยโค้ด Python ส่วนใหญ่

มาเข้าใจแนวคิดนี้ผ่านตัวอย่าง −

privateVar1.py

class myClass:     __privateVar = 27;     def __privMeth(self):         print("I'm inside class myClass")     def hello(self):         print("Private Variable value: ",myClass.__privateVar) foo = myClass() foo.hello() foo.__privateMeth

ในโปรแกรมข้างต้น __privMeth เป็นเมธอด private และ __privateVar เป็นตัวแปร private มาดูผลลัพธ์ของมัน −

ผลลัพธ์

Private Variable value: 27 Traceback (most recent call last):   File "C:/Python/Python361/privateVar1.py", line 12, in      foo.__privateMeth AttributeError: 'myClass' object has no attribute '__privateMeth'

จากผลลัพธ์ข้างต้น เราเห็นได้ว่า นอกจากคลาส "myClass" คุณไม่สามารถเข้าถึงเมธอด private และตัวแปร private ได้ อย่างไรก็ตาม ภายในคลาส (myClass) เราสามารถเข้าถึงตัวแปร private ได้ ในเมธอด hello() ตัวแปร __privateVar สามารถเข้าถึงได้ (ตามที่แสดง: "Private Variable value: 27")

ดังนั้นจากตัวอย่างข้างต้น เราสามารถเข้าใจได้ว่า ตัวแปรและเมธอดทั้งหมดภายในคลาสเป็น public โดยค่าเริ่มต้น เมื่อเราประกาศสมาชิกข้อมูลเป็น private หมายถึงพวกมันเข้าถึงได้เฉพาะภายในคลาสและเข้าถึงไม่ได้จากนอกคลาส เทคนิคการทำให้ตัวแปรหรือเมธอดเป็น private เรียกว่า data mangling Identifier รูปแบบ __spam (อย่างน้อยสอง leading underscores, สูงสุดหนึ่ง trailing underscore) จะถูกแทนที่ข้อความด้วย _classname__spam โดยที่ classname คือชื่อคลาสปัจจุบันที่มี leading underscore(s) ถูกลบออก การ mangling นี้ทำโดยไม่คำนึงถึงตำแหน่งไวยากรณ์ของ identifier ตราบใดที่มันเกิดขึ้นภายในการกำหนดค่าของคลาส

ชื่อ double underscore นั้นมีเจตนาหลีกเลี่ยงการ override โดย subclass โดยบังเอิญแทน