Sự khác biệt giữa biến công khai và biến riêng tư trong python

Chúng tôi sử dụng các từ khóa này để chỉ định cấp độ truy cập cho các biến thành viên hoặc cho các hàm thành viên [phương thức]

  • Biến công khai, là các biến hiển thị cho tất cả các lớp
  • Biến riêng, là các biến chỉ hiển thị với lớp mà chúng thuộc về
  • Các biến được bảo vệ, là các biến chỉ hiển thị đối với lớp mà chúng thuộc về và bất kỳ lớp con nào

Quyết định khi nào sử dụng các biến riêng tư, được bảo vệ hoặc công khai đôi khi rất khó. Bạn cần suy nghĩ liệu một đối tượng [hoặc chương trình] bên ngoài có thực sự cần truy cập trực tiếp vào thông tin hay không. Nếu bạn muốn các đối tượng khác truy cập dữ liệu nội bộ, nhưng muốn kiểm soát dữ liệu đó, bạn sẽ đặt dữ liệu đó ở chế độ riêng tư hoặc được bảo vệ, nhưng cung cấp các chức năng có thể thao tác dữ liệu theo cách được kiểm soát

Lấy ví dụ sau

public class bank_balance
{
	public String owner;
	public int balance; 

	public bank_balance[ String name, int dollars ]
	{
		owner = name;

		if [dollars >= 0]
			balance = dollars;
		else
			dollars =0;
	}
}

Chúng tôi đã khai báo chuỗi và số nguyên của mình là công khai. Điều này có nghĩa là bất kỳ đối tượng nào trong hệ thống đều có thể thay đổi số dư [đặt nó thành 0 hoặc thậm chí cho chúng ta số dư âm]. Điều này có thể khiến chương trình bị đổ, mặc dù chúng tôi đã viết mã trong hàm tạo của mình để ngăn số dư âm

Thay vào đó, lẽ ra chúng ta nên cung cấp phương thức getBalance/setBalance và đặt số dư của chúng ta ở chế độ riêng tư hoặc được bảo vệ. Các đối tượng khác vẫn có thể truy cập dữ liệu nhưng không thể đưa dữ liệu không hợp lệ vào

Vì vậy, về cơ bản, một gạch chân ở đầu phương thức, chức năng hoặc thành viên dữ liệu có nghĩa là bạn không nên truy cập phương thức này vì nó không phải là một phần của API. Hãy xem đoạn mã này.  

con trăn




__init__[4

__init__[5

def __init__[7self    2

    self1 selfself3self4 self5:

        selfself9

    , iterate]:1 selfself3

 

, iterate]:4class3 , iterate]:6, iterate]:7

Đoạn mã được lấy từ mã nguồn Django [django/forms/forms. py]. Điều này cho thấy lỗi là thuộc tính và nó cũng là một phần của API, nhưng phương thức _get_errors là “riêng tư”, vì vậy người ta không nên truy cập vào nó
 

__Dấu gạch dưới hàng đầu kép

Hai gạch dưới, lúc đầu, gây ra rất nhiều nhầm lẫn. Đây là về cú pháp chứ không phải là một quy ước. dấu gạch dưới kép sẽ xáo trộn tên thuộc tính của một lớp để tránh xung đột tên thuộc tính giữa các lớp. Ví dụ.  

Các thành viên của một lớp được khai báo là công khai có thể dễ dàng truy cập từ bất kỳ phần nào của chương trình. Tất cả các thành viên dữ liệu và chức năng thành viên của một lớp được công khai theo mặc định.  

Python3




# program to illustrate public access modifier in a class

 

class Geek:

     

     # constructor

     

Name:  R2J
Roll:  1706256
Branch:  Information Technology
1
Name:  R2J
Roll:  1706256
Branch:  Information Technology
2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
4

Name:  R2J
Roll:  1706256
Branch:  Information Technology
5

Name:  R2J
Roll:  1706256
Branch:  Information Technology
6
Name:  R2J
Roll:  1706256
Branch:  Information Technology
7

Name:  R2J
Roll:  1706256
Branch:  Information Technology
6
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
0
Name:  R2J
Roll:  1706256
Branch:  Information Technology
1
Name:  R2J
Roll:  1706256
Branch:  Information Technology
2

Name:  R2J
Roll:  1706256
Branch:  Information Technology
6
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
5
Name:  R2J
Roll:  1706256
Branch:  Information Technology
1
Name:  R2J
Roll:  1706256
Branch:  Information Technology
7

 

     

Name:  R2J
Roll:  1706256
Branch:  Information Technology
9

     

Name:  R2J
Roll:  1706256
Branch:  Information Technology
1
Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
4

Name:  R2J
Roll:  1706256
Branch:  Information Technology
5

Name:  R2J
Roll:  1706256
Branch:  Information Technology
6
Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
7

Name:  R2J
Roll:  1706256
Branch:  Information Technology
6
Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
9# program to illustrate public access modifier in a class0# program to illustrate public access modifier in a class1# program to illustrate public access modifier in a class2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3# program to illustrate public access modifier in a class4

 

# program to illustrate public access modifier in a class5

# program to illustrate public access modifier in a class6

Name:  R2J
Roll:  1706256
Branch:  Information Technology
1 # program to illustrate public access modifier in a class8# program to illustrate public access modifier in a class9# program to illustrate public access modifier in a class2class1class2

 

Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
7

Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
9_______195_______0class6class7

 

class8

class9

đầu ra.

Name:  R2J
Age:  20

 

Trong chương trình trên, geekName và geekAge là các thành viên dữ liệu công khai và phương thức displayAge[] là một hàm thành viên công khai của lớp Geek. Các thành viên dữ liệu này của lớp Geek có thể được truy cập từ bất kỳ đâu trong chương trình

Công cụ sửa đổi quyền truy cập được bảo vệ

Các thành viên của một lớp được khai báo là bảo vệ chỉ có thể truy cập được đối với một lớp dẫn xuất từ ​​nó. Các thành viên dữ liệu của một lớp được khai báo là được bảo vệ bằng cách thêm một ký hiệu gạch dưới '_' trước thành viên dữ liệu của lớp đó.  

Python3




Geek:0

 

Geek:1

class Geek:3

Geek:4

     Geek:6

     Geek:8

Name:  R2J
Roll:  1706256
Branch:  Information Technology
1      0

          2

Name:  R2J
Roll:  1706256
Branch:  Information Technology
1      0

          6

Name:  R2J
Roll:  1706256
Branch:  Information Technology
1      0

Geek:4

     # constructor

     1_______1

Name:  R2J
Roll:  1706256
Branch:  Information Technology
2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3     6

Name:  R2J
Roll:  1706256
Branch:  Information Technology
5_______1_______3     9
Name:  R2J
Roll:  1706256
Branch:  Information Technology
1
Name:  R2J
Roll:  1706256
Branch:  Information Technology
2

Name:  R2J
Roll:  1706256
Branch:  Information Technology
5_______1_______3# constructor4
Name:  R2J
Roll:  1706256
Branch:  Information Technology
1 # constructor6

Name:  R2J
Roll:  1706256
Branch:  Information Technology
5_______1_______3_______200_______9
Name:  R2J
Roll:  1706256
Branch:  Information Technology
1
Name:  R2J
Roll:  1706256
Branch:  Information Technology
01

Geek:4

     

Name:  R2J
Roll:  1706256
Branch:  Information Technology
04

     1_______1

Name:  R2J
Roll:  1706256
Branch:  Information Technology
07
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
4

 

Name:  R2J
Roll:  1706256
Branch:  Information Technology
5_______1_______11

Name:  R2J
Roll:  1706256
Branch:  Information Technology
5_______20_______9# program to illustrate public access modifier in a class0
Name:  R2J
Roll:  1706256
Branch:  Information Technology
15# program to illustrate public access modifier in a class2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
18

Name:  R2J
Roll:  1706256
Branch:  Information Technology
5_______20_______9# program to illustrate public access modifier in a class0
Name:  R2J
Roll:  1706256
Branch:  Information Technology
22# program to illustrate public access modifier in a class2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
25

 

 

Name:  R2J
Roll:  1706256
Branch:  Information Technology
26

class

Name:  R2J
Roll:  1706256
Branch:  Information Technology
28

 

Name:  R2J
Roll:  1706256
Branch:  Information Technology
29_______200_______

Name:  R2J
Roll:  1706256
Branch:  Information Technology
29_______1_______1
Name:  R2J
Roll:  1706256
Branch:  Information Technology
2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
35

Name:  R2J
Roll:  1706256
Branch:  Information Technology
36_______1_______37
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
39

Name:  R2J
Roll:  1706256
Branch:  Information Technology
40

Name:  R2J
Roll:  1706256
Branch:  Information Technology
29_______1_______42

Name:  R2J
Roll:  1706256
Branch:  Information Technology
29_______1_______1
Name:  R2J
Roll:  1706256
Branch:  Information Technology
45
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
4

Name:  R2J
Roll:  1706256
Branch:  Information Technology
48

Name:  R2J
Roll:  1706256
Branch:  Information Technology
49_______1_______50

Name:  R2J
Roll:  1706256
Branch:  Information Technology
36_______20_______9# program to illustrate public access modifier in a class0class6# program to illustrate public access modifier in a class2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
57

Name:  R2J
Roll:  1706256
Branch:  Information Technology
48

Name:  R2J
Roll:  1706256
Branch:  Information Technology
49_______1_______60

Name:  R2J
Roll:  1706256
Branch:  Information Technology
36_______1_______3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
63

 

Name:  R2J
Roll:  1706256
Branch:  Information Technology
64

# program to illustrate public access modifier in a class6

Name:  R2J
Roll:  1706256
Branch:  Information Technology
1 # program to illustrate public access modifier in a class8# program to illustrate public access modifier in a class9# program to illustrate public access modifier in a class2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
70# program to illustrate public access modifier in a class2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
72class2

 

Name:  R2J
Roll:  1706256
Branch:  Information Technology
74

Name:  R2J
Roll:  1706256
Branch:  Information Technology
75

đầu ra.

Name:  R2J
Roll:  1706256
Branch:  Information Technology

 

Trong chương trình trên, _name, _roll và _branch là các thành viên dữ liệu được bảo vệ và phương thức _displayRollAndBranch[] là một phương thức được bảo vệ của siêu lớp Student. Phương thức displayDetails[] là một hàm thành viên công khai của lớp Geek được lấy từ lớp Sinh viên, phương thức displayDetails[] trong lớp Geek truy cập các thành viên dữ liệu được bảo vệ của lớp Sinh viên.  

Công cụ sửa đổi quyền truy cập riêng tư

Các thành viên của một lớp được khai báo là riêng tư chỉ có thể truy cập được trong lớp, công cụ sửa đổi truy cập riêng tư là công cụ sửa đổi truy cập an toàn nhất. Các thành viên dữ liệu của một lớp được khai báo là riêng tư bằng cách thêm ký hiệu gạch dưới kép '__' trước thành viên dữ liệu của lớp đó.  

Python3




Name:  R2J
Roll:  1706256
Branch:  Information Technology
76

 

class Geek:

Geek:4

     

Name:  R2J
Roll:  1706256
Branch:  Information Technology
81

     

Name:  R2J
Roll:  1706256
Branch:  Information Technology
83
Name:  R2J
Roll:  1706256
Branch:  Information Technology
1      0

     

Name:  R2J
Roll:  1706256
Branch:  Information Technology
87
Name:  R2J
Roll:  1706256
Branch:  Information Technology
1      0

     

Name:  R2J
Roll:  1706256
Branch:  Information Technology
91
Name:  R2J
Roll:  1706256
Branch:  Information Technology
1      0

 

     # constructor

     1_______1

Name:  R2J
Roll:  1706256
Branch:  Information Technology
2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3     6

Name:  R2J
Roll:  1706256
Branch:  Information Technology
5_______1_______3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
03
Name:  R2J
Roll:  1706256
Branch:  Information Technology
1
Name:  R2J
Roll:  1706256
Branch:  Information Technology
2

Name:  R2J
Roll:  1706256
Branch:  Information Technology
5_______1_______3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
08
Name:  R2J
Roll:  1706256
Branch:  Information Technology
1 # constructor6

Name:  R2J
Roll:  1706256
Branch:  Information Technology
5_______1_______3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
13
Name:  R2J
Roll:  1706256
Branch:  Information Technology
1
Name:  R2J
Roll:  1706256
Branch:  Information Technology
01

 

     

Name:  R2J
Roll:  1706256
Branch:  Information Technology
17

     

Name:  R2J
Roll:  1706256
Branch:  Information Technology
1
Name:  R2J
Roll:  1706256
Branch:  Information Technology
20_______1_______3
Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
4

Name:  R2J
Roll:  1706256
Branch:  Information Technology
5

Name:  R2J
Roll:  1706256
Branch:  Information Technology
6
Name:  R2J
Roll:  1706256
Branch:  Information Technology
25

Name:  R2J
Roll:  1706256
Branch:  Information Technology
6
Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
9# program to illustrate public access modifier in a class0class6# program to illustrate public access modifier in a class2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
32

Name:  R2J
Roll:  1706256
Branch:  Information Technology
6
Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
9# program to illustrate public access modifier in a class0
Name:  R2J
Roll:  1706256
Branch:  Information Technology
15# program to illustrate public access modifier in a class2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
39

Name:  R2J
Roll:  1706256
Branch:  Information Technology
6
Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
9# program to illustrate public access modifier in a class0
Name:  R2J
Roll:  1706256
Branch:  Information Technology
22# program to illustrate public access modifier in a class2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
46

Geek:4

     

Name:  R2J
Roll:  1706256
Branch:  Information Technology
42

     

Name:  R2J
Roll:  1706256
Branch:  Information Technology
1
Name:  R2J
Roll:  1706256
Branch:  Information Technology
52
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Public Data Member:  Geeks
Protected Data Member:  4
Private Data Member:  Geeks !
4

Name:  R2J
Roll:  1706256
Branch:  Information Technology
6

Name:  R2J
Roll:  1706256
Branch:  Information Technology
6
Name:  R2J
Roll:  1706256
Branch:  Information Technology
57

Name:  R2J
Roll:  1706256
Branch:  Information Technology
6
Name:  R2J
Roll:  1706256
Branch:  Information Technology
3
Name:  R2J
Roll:  1706256
Branch:  Information Technology
60

 

Name:  R2J
Roll:  1706256
Branch:  Information Technology
61

# program to illustrate public access modifier in a class6

Name:  R2J
Roll:  1706256
Branch:  Information Technology
1 # program to illustrate public access modifier in a class8# program to illustrate public access modifier in a class9# program to illustrate public access modifier in a class2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
70# program to illustrate public access modifier in a class2
Name:  R2J
Roll:  1706256
Branch:  Information Technology
72class2

 

class8

Name:  R2J
Roll:  1706256
Branch:  Information Technology
72

đầu ra.

Name:  R2J
Roll:  1706256
Branch:  Information Technology

 

Trong chương trình trên, __name, __roll và __branch là các thành viên riêng, phương thức __displayDetails[] là một hàm thành viên riêng [những hàm này chỉ có thể được truy cập trong lớp] và phương thức accessPrivateFunction[] là một hàm thành viên chung của lớp Geek. . Phương thức accessPrivateFunction[] truy cập các thành viên private của lớp Geek
 

Dưới đây là chương trình minh họa việc sử dụng cả ba công cụ sửa đổi truy cập trên [công khai, được bảo vệ và riêng tư] của một lớp trong Python.  

Sự khác biệt giữa các biến công khai và riêng tư là gì?

Biến công khai, là các biến hiển thị cho tất cả các lớp. Biến riêng, là những biến chỉ hiển thị với lớp mà chúng thuộc về .

Sự khác biệt giữa công khai/riêng tư và được bảo vệ trong Python là gì?

Đối tượng của cùng một lớp được yêu cầu để gọi một phương thức công khai. Sự sắp xếp các biến cá thể riêng và phương thức công khai này đảm bảo nguyên tắc đóng gói dữ liệu. Các thành viên được bảo vệ của một lớp có thể truy cập được từ bên trong lớp đó và cũng có sẵn cho các lớp con của nó .

Python có các biến công khai và riêng tư không?

Do đó, Python cung cấp triển khai khái niệm của các công cụ sửa đổi quyền truy cập công khai, được bảo vệ và riêng tư , nhưng không giống như các ngôn ngữ khác như C#, Java, C++.

Biến riêng có nghĩa là gì trong Python?

Nói chung, các biến riêng tư là những biến chỉ có thể nhìn thấy và truy cập được trong lớp mà chúng thuộc về chứ không phải bên ngoài lớp hoặc bất kỳ lớp nào khác. These variables are used to access the values whenever the program runs that is used to keep the data hidden from other classes.

Chủ Đề