Biến riêng trong mô-đun python

Khi làm việc với các ngôn ngữ lập trình hướng đối tượng, đôi khi chúng ta cần giữ cho một đoạn mã không bị thực thi tùy tiện từ bất kỳ nơi nào khác trong hệ thống. Để giải quyết vấn đề này, khái niệm về công cụ sửa đổi truy cập đã được đưa vào thiết kế ngôn ngữ ban đầu

Trong các ngôn ngữ như C++, Java hoặc C#, chúng ta có thể sử dụng các từ khóa dành riêng public, protected hoặc private để đánh dấu các thành viên của một lớp. Python có tất cả ba công cụ sửa đổi truy cập, nhưng nó không sử dụng từ khóa để đánh dấu thành viên. Thay vào đó, Python sử dụng dấu gạch dưới

def public_func[]:
print["This function can be seen"]

def __hidden_func[]:
print["You can't see this during import"]
3 để đánh dấu một hàm hoặc biến là được bảo vệ hoặc riêng tư

Tuy nhiên, Python không thực sự thực thi các công cụ sửa đổi truy cập này như các ngôn ngữ khác. Thay vào đó, nó sử dụng xáo trộn tên để làm xáo trộn hàm hoặc biến và khiến nó khó tìm hơn. Nói cách khác, nếu bạn thực sự muốn truy cập nó, bạn có thể. Điều duy nhất buộc quy ước này là bạn với tư cách là lập trình viên

Bảo vệ chức năng mô-đun

Khi làm việc với các chức năng rộng của mô-đun, đôi khi chúng tôi không muốn chức năng của mình có thể sử dụng được cho bất kỳ ai nhập mô-đun. Một cách để thực hiện điều đó là đặt một hoặc hai dấu gạch dưới trước tên hàm

Ví dụ: nếu chúng tôi xác định tệp mô-đun

>>> import random_module>>> random_module.public_func[]
This function can be seen
>>> random_module.__hidden_func[]
Traceback [most recent call last]:
File "", line 1, in
AttributeError: module 'random_module' has no attribute '__hidden_func'
0

def public_func[]:
print["This function can be seen"]

def __hidden_func[]:
print["You can't see this during import"]

Sau đó, chúng tôi có thể nhập mô-đun đó vào trình thông dịch và thử sử dụng nó

>>> import random_module>>> random_module.public_func[]
This function can be seen
>>> random_module.__hidden_func[]
Traceback [most recent call last]:
File "", line 1, in
AttributeError: module 'random_module' has no attribute '__hidden_func'

Điều này cũng hoạt động nếu chúng tôi sử dụng

>>> import random_module>>> random_module.public_func[]
This function can be seen
>>> random_module.__hidden_func[]
Traceback [most recent call last]:
File "", line 1, in
AttributeError: module 'random_module' has no attribute '__hidden_func'
1 để chức năng riêng tư của chúng tôi có thể giữ nguyên như vậy

Các phương thức và biến riêng của lớp

Đôi khi, chúng tôi muốn đặt các hạn chế đối với các thành viên trong lớp của mình, nơi họ không thể truy cập được bên ngoài lớp hoặc thậm chí từ bất kỳ lớp con nào. Trong những trường hợp đó, chúng ta có thể khai báo một biến hoặc phương thức là riêng tư bằng cách sử dụng dấu gạch dưới kép

>>> import random_module>>> random_module.public_func[]
This function can be seen
>>> random_module.__hidden_func[]
Traceback [most recent call last]:
File "", line 1, in
AttributeError: module 'random_module' has no attribute '__hidden_func'
2

class Example:
def __init__[self]:
self.__a = "This is a private variable"
def __can_not_run[self]:
print["Can't be executed outside of this class"]

Nếu chúng ta khởi tạo lớp này và cố gắng truy cập biến hoặc phương thức

>>> ex = Example[]>>> print[ex.__a]
Traceback [most recent call last]:
File "", line 1, in
AttributeError: 'Example' object has no attribute '__a'
>>> ex.__can_not_run[]
Traceback [most recent call last]:
File "", line 1, in
AttributeError: 'Example' object has no attribute '__can_not_run'

Chúng tôi có thể thấy rằng không có thuộc tính nào có sẵn để chúng tôi sử dụng. Nhưng chúng ta có thể truy cập chúng nếu chúng ta phân lớp không?

class SubExample[Example]:
def print_a[self]:
print[self.__a]

Bây giờ nếu chúng ta nhập cái này

________số 8

Lỗi trông hơi khác một chút nhưng nó vẫn là lỗi. Như tôi đã đề cập ở trên, nội bộ Python sử dụng xáo trộn tên để thực sự ẩn các thuộc tính. Nếu một biến được bảo vệ, thay vì ở chế độ riêng tư, nó sẽ được chuyển vào tham chiếu

>>> import random_module>>> random_module.public_func[]
This function can be seen
>>> random_module.__hidden_func[]
Traceback [most recent call last]:
File "", line 1, in
AttributeError: module 'random_module' has no attribute '__hidden_func'
3 để ít truy cập hơn. Nhưng nếu bạn biết mẫu đó, bạn thực sự có thể tiếp cận và sử dụng bất kỳ biến được bảo vệ nào từ bất kỳ đâu

Các phương thức và biến được bảo vệ của lớp

Ok, như vậy chúng ta đã thấy trong ví dụ trước rằng nếu biến hoặc phương thức chỉ được bảo vệ thì chúng ta có thể truy cập chúng từ một lớp con. Vì vậy, làm thế nào để chúng ta xác định một thuộc tính được bảo vệ?

def public_func[]:
print["This function can be seen"]

def __hidden_func[]:
print["You can't see this during import"]
0

Bây giờ chúng ta có thể tạo một lớp con và kiểm tra nó

def public_func[]:
print["This function can be seen"]

def __hidden_func[]:
print["You can't see this during import"]
1

Và nếu chúng ta tải cái này vào trình thông dịch

def public_func[]:
print["This function can be seen"]

def __hidden_func[]:
print["You can't see this during import"]
2

Và với điều đó, bây giờ bạn đã biết cách đóng gói và làm xáo trộn các hàm và biến của mình bên trong Python bằng Access Modifiers

P. S. Nếu bạn đang tìm kiếm các ứng dụng đầy thách thức để xây dựng bằng Python, đừng quên đăng ký nhận bản tin thử thách miễn phí hàng tuần của chúng tôi tại đây

Biến riêng tư trong Python là gì?

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.

__ init __ có riêng tư trong Python không?

Phương thức private cơ bản trong Python là phương thức __init__[] được sử dụng làm phương thức khởi tạo của lớp . Phương thức này được gọi khi bạn khởi tạo đối tượng lớp tùy thuộc vào đối số của phương thức.

Chúng ta có thể tạo các biến riêng tư trong Python không?

Trong Python, không tồn tại các biến thể hiện “Riêng tư” không thể truy cập được ngoại trừ bên trong một đối tượng.

__ có riêng tư trong Python không?

Các phương thức riêng tư là những phương thức không được truy cập bên ngoài lớp cũng như bởi bất kỳ lớp cơ sở nào. Trong Python, không tồn tại các phương thức Riêng tư không thể truy cập ngoại trừ bên trong một lớp. Tuy nhiên, để xác định một phương thức riêng, tiền tố tên thành viên với dấu gạch dưới kép “__” .

Chủ Đề