Python ช่วยให้เราสามารถสร้างวิธีการและตัวแปร 'ส่วนตัว' ภายในชั้นเรียนโดยการใส่เครื่องหมายขีดล่างคู่กับชื่อดังนี้: __myPrivateMethod()
. แล้วจะอธิบายได้อย่างไร
>>> class MyClass:
... def myPublicMethod(self):
... print 'public method'
... def __myPrivateMethod(self):
... print 'this is private!!'
...
>>> obj = MyClass()
>>> obj.myPublicMethod()
public method
>>> obj.__myPrivateMethod()
Traceback (most recent call last):
File "", line 1, in
AttributeError: MyClass instance has no attribute '__myPrivateMethod'
>>> dir(obj)
['_MyClass__myPrivateMethod', '__doc__', '__module__', 'myPublicMethod']
>>> obj._MyClass__myPrivateMethod()
this is private!!
ตกลงคืออะไร!
ฉันจะอธิบายเรื่องนี้เล็กน้อยสำหรับผู้ที่ไม่ค่อยเข้าใจ
>>> class MyClass:
... def myPublicMethod(self):
... print 'public method'
... def __myPrivateMethod(self):
... print 'this is private!!'
...
>>> obj = MyClass()
สิ่งที่ฉันทำคือสร้างชั้นเรียนด้วยวิธีสาธารณะและวิธีส่วนตัวและยกตัวอย่าง
ต่อไปฉันเรียกวิธีการสาธารณะ
>>> obj.myPublicMethod()
public method
ต่อไปฉันลองและเรียกวิธีการส่วนตัว
>>> obj.__myPrivateMethod()
Traceback (most recent call last):
File "", line 1, in
AttributeError: MyClass instance has no attribute '__myPrivateMethod'
ทุกอย่างดูดีที่นี่; เราไม่สามารถเรียกมันได้ ในความเป็นจริงแล้วมันเป็น 'ส่วนตัว' จริงๆแล้วมันไม่ใช่ การเรียกใช้dir ()บนวัตถุจะเผยให้เห็นวิธีการใหม่อันมหัศจรรย์ที่ไพ ธ อนสร้างขึ้นอย่างน่าอัศจรรย์สำหรับวิธีการ 'ส่วนตัว' ทั้งหมดของคุณ
>>> dir(obj)
['_MyClass__myPrivateMethod', '__doc__', '__module__', 'myPublicMethod']
ชื่อเมธอดใหม่นี้จะเป็นขีดล่างเสมอตามด้วยชื่อคลาสตามด้วยชื่อเมธอด
>>> obj._MyClass__myPrivateMethod()
this is private!!
มากสำหรับการห่อหุ้มใช่มั้ย
ไม่ว่าในกรณีใดฉันมักจะได้ยินว่า Python ไม่รองรับการห่อหุ้มดังนั้นทำไมถึงต้องลอง สิ่งที่ช่วยให้?