Computer >> Máy Tính >  >> Lập trình >> Python

Biến riêng trong Python

Trong điều kiện thực tế (thực tế), python không có bất kỳ thứ gì được gọi là biến thành viên riêng trong Python. Tuy nhiên, việc thêm hai gạch dưới (__) ở đầu làm cho một biến hoặc một phương thức trở thành riêng tư là quy ước được hầu hết mã python sử dụng.

Hãy hiểu khái niệm này qua một ví dụ -

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

Trong chương trình trên, __privMeth là một phương thức private và __privateVar là một biến private. Hãy xem đầu ra của nó ngay bây giờ -

Đầu ra

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

Từ kết quả trên, chúng ta có thể thấy rằng bên ngoài lớp “myClass”, bạn không thể truy cập phương thức private cũng như biến private. Tuy nhiên, bên trong lớp (myClass) chúng ta có thể truy cập các biến private. Trong phương thức hello (), biến __privateVar có thể được truy cập (như được hiển thị ở trên:“Giá trị của biến riêng:27”).

Vì vậy, từ ví dụ trên, chúng ta có thể hiểu rằng tất cả các biến và các phương thức bên trong lớp đều là public của phương thức. Khi chúng tôi khai báo thành viên dữ liệu là private, điều đó có nghĩa là chúng chỉ có thể truy cập được bên cạnh lớp và không thể truy cập được bên ngoài lớp. Kỹ thuật tạo một biến hoặc một phương thức riêng được gọi là data mangling. Bất kỳ số nhận dạng nào của biểu mẫu __spam (ít nhất hai dấu gạch dưới ở đầu, nhiều nhất một dấu gạch dưới ở cuối) được thay thế bằng văn bản bằng _classname__spam , trong đó tên lớp là tên lớp hiện tại với (các) dấu gạch dưới ở đầu bị tước bỏ. Việc phân loại này được thực hiện mà không liên quan đến vị trí cú pháp của mã định danh, miễn là nó xảy ra trong định nghĩa của một lớp.

Thay vào đó, các tên có dấu gạch dưới kép nhằm tránh việc ghi đè tình cờ bởi một lớp con.