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
self
1 self
self
3self
4 self
5:
self
self
9
, iterate]:
1 self
self
3
, iterate]:
4class
3 , 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 Technology1
Name: R2J Roll: 1706256 Branch: Information Technology2
Name: R2J Roll: 1706256 Branch: Information Technology3
Name: R2J Roll: 1706256 Branch: Information Technology4
Name: R2J Roll: 1706256 Branch: Information Technology5
Name: R2J Roll: 1706256 Branch: Information Technology6
Name: R2J Roll: 1706256 Branch: Information Technology7
Name: R2J Roll: 1706256 Branch: Information Technology6
Name: R2J Roll: 1706256 Branch: Information Technology3
Name: R2J Roll: 1706256 Branch: Information Technology0
Name: R2J Roll: 1706256 Branch: Information Technology1
Name: R2J Roll: 1706256 Branch: Information Technology2
Name: R2J Roll: 1706256 Branch: Information Technology6
Name: R2J Roll: 1706256 Branch: Information Technology3
Name: R2J Roll: 1706256 Branch: Information Technology5
Name: R2J Roll: 1706256 Branch: Information Technology1
Name: R2J Roll: 1706256 Branch: Information Technology7
Name: R2J Roll: 1706256 Branch: Information Technology9
Name: R2J Roll: 1706256 Branch: Information Technology1
Public Data Member: Geeks Protected Data Member: 4 Private Data Member: Geeks !2
Name: R2J Roll: 1706256 Branch: Information Technology3
Public Data Member: Geeks Protected Data Member: 4 Private Data Member: Geeks !4
Name: R2J Roll: 1706256 Branch: Information Technology5
Name: R2J Roll: 1706256 Branch: Information Technology6
Public Data Member: Geeks Protected Data Member: 4 Private Data Member: Geeks !7
Name: R2J Roll: 1706256 Branch: Information Technology6
Public Data Member: Geeks Protected Data Member: 4 Private Data Member: Geeks !9
# program to illustrate public access modifier in a class
0# program to illustrate public access modifier in a class
1# program to illustrate public access modifier in a class
2Name: R2J Roll: 1706256 Branch: Information Technology3
# program to illustrate public access modifier in a class
4
# program to illustrate public access modifier in a class
5
# program to illustrate public access modifier in a class
6
Name: R2J Roll: 1706256 Branch: Information Technology1
# program to illustrate public access modifier in a class
8# program to illustrate public access modifier in a class
9# program to illustrate public access modifier in a class
2class
1class
2
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_______0
class
6class
7
class
8
class
9
đầ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 Technology1
0
2
Name: R2J Roll: 1706256 Branch: Information Technology1
0
6
Name: R2J Roll: 1706256 Branch: Information Technology1
0Geek:
4
# constructor
1_______1
Name: R2J Roll: 1706256 Branch: Information Technology2
Name: R2J Roll: 1706256 Branch: Information Technology3
6Name: R2J Roll: 1706256 Branch: Information Technology5_______1_______3
9Name: R2J Roll: 1706256 Branch: Information Technology1
Name: R2J Roll: 1706256 Branch: Information Technology2
Name: R2J Roll: 1706256 Branch: Information Technology5_______1_______3
# constructor
4Name: R2J Roll: 1706256 Branch: Information Technology1
# constructor
6Name: R2J Roll: 1706256 Branch: Information Technology5_______1_______3_______200_______9
Name: R2J Roll: 1706256 Branch: Information Technology1
Name: R2J Roll: 1706256 Branch: Information Technology01
Geek:
4
Name: R2J Roll: 1706256 Branch: Information Technology04
1_______1
Name: R2J Roll: 1706256 Branch: Information Technology07
Name: R2J Roll: 1706256 Branch: Information Technology3
Public Data Member: Geeks Protected Data Member: 4 Private Data Member: Geeks !4
Name: R2J Roll: 1706256 Branch: Information Technology5_______1_______11
Name: R2J Roll: 1706256 Branch: Information Technology5_______20_______9
# program to illustrate public access modifier in a class
0Name: R2J Roll: 1706256 Branch: Information Technology15
# program to illustrate public access modifier in a class
2Name: R2J Roll: 1706256 Branch: Information Technology3
Name: R2J Roll: 1706256 Branch: Information Technology18
Name: R2J Roll: 1706256 Branch: Information Technology5_______20_______9
# program to illustrate public access modifier in a class
0Name: R2J Roll: 1706256 Branch: Information Technology22
# program to illustrate public access modifier in a class
2Name: R2J Roll: 1706256 Branch: Information Technology3
Name: R2J Roll: 1706256 Branch: Information Technology25
Name: R2J Roll: 1706256 Branch: Information Technology26
class
Name: R2J Roll: 1706256 Branch: Information Technology28
Name: R2J Roll: 1706256 Branch: Information Technology29_______200_______
Name: R2J Roll: 1706256 Branch: Information Technology29_______1_______1
Name: R2J Roll: 1706256 Branch: Information Technology2
Name: R2J Roll: 1706256 Branch: Information Technology3
Name: R2J Roll: 1706256 Branch: Information Technology35
Name: R2J Roll: 1706256 Branch: Information Technology36_______1_______37
Name: R2J Roll: 1706256 Branch: Information Technology3
Name: R2J Roll: 1706256 Branch: Information Technology39
Name: R2J Roll: 1706256 Branch: Information Technology40
Name: R2J Roll: 1706256 Branch: Information Technology29_______1_______42
Name: R2J Roll: 1706256 Branch: Information Technology29_______1_______1
Name: R2J Roll: 1706256 Branch: Information Technology45
Name: R2J Roll: 1706256 Branch: Information Technology3
Public Data Member: Geeks Protected Data Member: 4 Private Data Member: Geeks !4
Name: R2J Roll: 1706256 Branch: Information Technology48
Name: R2J Roll: 1706256 Branch: Information Technology49_______1_______50
Name: R2J Roll: 1706256 Branch: Information Technology36_______20_______9
# program to illustrate public access modifier in a class
0class
6# program to illustrate public access modifier in a class
2Name: R2J Roll: 1706256 Branch: Information Technology3
Name: R2J Roll: 1706256 Branch: Information Technology57
Name: R2J Roll: 1706256 Branch: Information Technology48
Name: R2J Roll: 1706256 Branch: Information Technology49_______1_______60
Name: R2J Roll: 1706256 Branch: Information Technology36_______1_______3
Name: R2J Roll: 1706256 Branch: Information Technology63
Name: R2J Roll: 1706256 Branch: Information Technology64
# program to illustrate public access modifier in a class
6
Name: R2J Roll: 1706256 Branch: Information Technology1
# program to illustrate public access modifier in a class
8# program to illustrate public access modifier in a class
9# program to illustrate public access modifier in a class
2Name: R2J Roll: 1706256 Branch: Information Technology70
# program to illustrate public access modifier in a class
2Name: R2J Roll: 1706256 Branch: Information Technology72
class
2
Name: R2J Roll: 1706256 Branch: Information Technology74
Name: R2J Roll: 1706256 Branch: Information Technology75
đầ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 Technology76
class
Geek:
Geek:
4
Name: R2J Roll: 1706256 Branch: Information Technology81
Name: R2J Roll: 1706256 Branch: Information Technology83
Name: R2J Roll: 1706256 Branch: Information Technology1
0
Name: R2J Roll: 1706256 Branch: Information Technology87
Name: R2J Roll: 1706256 Branch: Information Technology1
0
Name: R2J Roll: 1706256 Branch: Information Technology91
Name: R2J Roll: 1706256 Branch: Information Technology1
0
# constructor
1_______1
Name: R2J Roll: 1706256 Branch: Information Technology2
Name: R2J Roll: 1706256 Branch: Information Technology3
6Name: R2J Roll: 1706256 Branch: Information Technology5_______1_______3
Name: R2J Roll: 1706256 Branch: Information Technology03
Name: R2J Roll: 1706256 Branch: Information Technology1
Name: R2J Roll: 1706256 Branch: Information Technology2
Name: R2J Roll: 1706256 Branch: Information Technology5_______1_______3
Name: R2J Roll: 1706256 Branch: Information Technology08
Name: R2J Roll: 1706256 Branch: Information Technology1
# constructor
6Name: R2J Roll: 1706256 Branch: Information Technology5_______1_______3
Name: R2J Roll: 1706256 Branch: Information Technology13
Name: R2J Roll: 1706256 Branch: Information Technology1
Name: R2J Roll: 1706256 Branch: Information Technology01
Name: R2J Roll: 1706256 Branch: Information Technology17
Name: R2J Roll: 1706256 Branch: Information Technology1
Name: R2J Roll: 1706256 Branch: Information Technology20_______1_______3
Public Data Member: Geeks Protected Data Member: 4 Private Data Member: Geeks !4
Name: R2J Roll: 1706256 Branch: Information Technology5
Name: R2J Roll: 1706256 Branch: Information Technology6
Name: R2J Roll: 1706256 Branch: Information Technology25
Name: R2J Roll: 1706256 Branch: Information Technology6
Public Data Member: Geeks Protected Data Member: 4 Private Data Member: Geeks !9
# program to illustrate public access modifier in a class
0class
6# program to illustrate public access modifier in a class
2Name: R2J Roll: 1706256 Branch: Information Technology3
Name: R2J Roll: 1706256 Branch: Information Technology32
Name: R2J Roll: 1706256 Branch: Information Technology6
Public Data Member: Geeks Protected Data Member: 4 Private Data Member: Geeks !9
# program to illustrate public access modifier in a class
0Name: R2J Roll: 1706256 Branch: Information Technology15
# program to illustrate public access modifier in a class
2Name: R2J Roll: 1706256 Branch: Information Technology3
Name: R2J Roll: 1706256 Branch: Information Technology39
Name: R2J Roll: 1706256 Branch: Information Technology6
Public Data Member: Geeks Protected Data Member: 4 Private Data Member: Geeks !9
# program to illustrate public access modifier in a class
0Name: R2J Roll: 1706256 Branch: Information Technology22
# program to illustrate public access modifier in a class
2Name: R2J Roll: 1706256 Branch: Information Technology3
Name: R2J Roll: 1706256 Branch: Information Technology46
Geek:
4
Name: R2J Roll: 1706256 Branch: Information Technology42
Name: R2J Roll: 1706256 Branch: Information Technology1
Name: R2J Roll: 1706256 Branch: Information Technology52
Name: R2J Roll: 1706256 Branch: Information Technology3
Public Data Member: Geeks Protected Data Member: 4 Private Data Member: Geeks !4
Name: R2J Roll: 1706256 Branch: Information Technology6
Name: R2J Roll: 1706256 Branch: Information Technology6
Name: R2J Roll: 1706256 Branch: Information Technology57
Name: R2J Roll: 1706256 Branch: Information Technology6
Name: R2J Roll: 1706256 Branch: Information Technology3
Name: R2J Roll: 1706256 Branch: Information Technology60
Name: R2J Roll: 1706256 Branch: Information Technology61
# program to illustrate public access modifier in a class
6
Name: R2J Roll: 1706256 Branch: Information Technology1
# program to illustrate public access modifier in a class
8# program to illustrate public access modifier in a class
9# program to illustrate public access modifier in a class
2Name: R2J Roll: 1706256 Branch: Information Technology70
# program to illustrate public access modifier in a class
2Name: R2J Roll: 1706256 Branch: Information Technology72
class
2
class
8
Name: R2J Roll: 1706256 Branch: Information Technology72
đầ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.