Trong Lập trình Hướng đối tượng (OOP) — một cách tiếp cận thiết kế phần mềm — chúng ta dùng “đối tượng” để mô hình hóa các thực thể trong thế giới thực. Một đối tượng là một cấu trúc dữ liệu có thuộc tính (data) và phương thức (hàm) tác động lên dữ liệu đó. Các hệ thống phức tạp có thể dễ thiết kế hơn khi sử dụng đối tượng.
Đóng gói (encapsulation) là một khái niệm nền tảng trong OOP. Nó có nghĩa là nhóm dữ liệu và các phương thức của một đối tượng lại, đồng thời ẩn các chi tiết khỏi thế giới bên ngoài. Hãy xem đóng gói như một quá trình tạo ra một ‘viên nang’ (một đối tượng) với dữ liệu và cách thức thao tác dữ liệu riêng của nó.
Mục đích chính của đóng gói là:
Ngăn chặn truy cập trực tiếp vào dữ liệu (toàn vẹn dữ liệu).
Đơn giản hóa hệ thống bằng cách chỉ hiển thị những gì cần thiết (trừu tượng hóa).
Các phương thức private là chìa khóa để đạt được đóng gói bằng cách ẩn các chi tiết triển khai nội bộ của một lớp.
Khi biến một phương thức thành private, bạn nói với các lập trình viên khác rằng phương thức này không được dùng để truy cập trực tiếp. Điều này có thể ngăn lỗi và sai sót bằng cách đảm bảo rằng trạng thái nội bộ của một đối tượng chỉ được thay đổi theo những cách được kiểm soát.
Tại đây, chúng ta sẽ giới thiệu phương thức private, cú pháp để định nghĩa chúng, cách triển khai trong các ví dụ thực tế, và các thực tiễn tốt nhất khi sử dụng.
Phương thức Private là gì?
Phương thức private trong lập trình hướng đối tượng (OOP) là các hàm bên trong một lớp được thiết kế chỉ để sử dụng nội bộ. Chúng đóng gói chức năng của lớp, đảm bảo cơ chế hoạt động bên trong không bị can thiệp từ bên ngoài.
Sự đóng gói này tạo ra một lớp trừu tượng, cho phép lớp kiểm soát trạng thái và hành vi nội bộ, đồng thời có thể thay đổi cách triển khai mà không ảnh hưởng đến mã bên ngoài phụ thuộc vào nó.
Trong Python, quy ước để biểu thị phương thức private là đặt tiền tố tên phương thức bằng một dấu gạch dưới đơn (_) hoặc hai dấu gạch dưới (__). Điều này đóng vai trò như một gợi ý cho lập trình viên về phạm vi dự định của phương thức và chỉ là một quy ước.
Mặc dù quy ước này không cưỡng chế tính riêng tư nghiêm ngặt như ở một số ngôn ngữ khác, nó là một thực hành được cộng đồng Python tôn trọng để báo hiệu phạm vi sử dụng dự kiến của phương thức. Ở phần sau, chúng ta sẽ đi sâu hơn vào các khía cạnh này.
Cú pháp của Phương thức Private
Có hai cách khác nhau để định nghĩa phương thức private, chúng ta sẽ xem qua các ví dụ.
Chúng ta có thể định nghĩa một phương thức private bằng một dấu gạch dưới trước tên hàm:
classMyClass:def_private_method(self):print("This is a private method")Được hỗ trợ bởi
Định nghĩa này chỉ là một quy ước dành cho lập trình viên vì hàm vẫn có thể được truy cập bên ngoài lớp, dù điều đó không được khuyến nghị.
Hãy tạo một đối tượng và thử truy cập phương thức private đã tạo:
# Creating an object
obj = MyClass()# Accessing from outside
obj._private_method()# Not recommended to call directly, but possibleĐược hỗ trợ bởi
Có một cú pháp khác để định nghĩa phương thức private trong Python bằng hai dấu gạch dưới. Nó trông như sau:
classMyClass:def__private_method(self):print("This is a private method")
obj = MyClass()# obj.__private_method() # This will raise an AttributeErrorĐược hỗ trợ bởi
Khi chúng ta cố gắng truy cập phương thức private từ bên ngoài lớp, nó ném ra AttributeError, báo hiệu rằng không thể truy cập trực tiếp bằng tên hàm.
Tóm tắt cú pháp phương thức private trong Python:
Một dấu gạch dưới: chỉ là quy ước cho lập trình viên, có thể được truy cập bên ngoài hàm.
Hai dấu gạch dưới: không thể truy cập bên ngoài hàm chỉ với tên hàm. Vẫn có thể truy cập thông qua “Name Mangling” mà chúng ta sẽ xem sau trong hướng dẫn này.
Triển khai Phương thức Private trong Python
Lấy ví dụ thực tế: hãy xem xét một lớp BankAccount an toàn và thân thiện để quản lý giao dịch tài chính cho một người dùng. Yêu cầu đối với tài khoản ngân hàng là:
Lớp phải đóng gói số dư của chủ tài khoản, cho phép nạp và rút tiền đồng thời đảm bảo số dư không thể bị thao túng trực tiếp từ bên ngoài lớp.
Lớp nên hỗ trợ chuyển tiền an toàn giữa các tài khoản, cập nhật số dư của tài khoản nhận mà không để lộ cơ chế nội bộ để sửa đổi số dư.
Giải pháp phải tuân thủ các nguyên tắc của lập trình hướng đối tượng, cụ thể là đóng gói và trừu tượng hóa, để duy trì tính toàn vẹn dữ liệu của tài khoản và cung cấp một giao diện rõ ràng, đơn giản để tương tác với tài khoản.
Tất nhiên, tài khoản ngân hàng cần nhiều chức năng hơn như kiểm tra số dư, chuyển đổi tiền tệ và xử lý lãi suất — nhưng để đơn giản, chúng ta sẽ bỏ qua những phần này trong triển khai.
Hãy triển khai giải pháp này và cùng hiểu đoạn mã.
classBankAccount:def__init__(self, account_holder, initial_balance=0):
self.account_holder = account_holder
self.__balance = initial_balance # Private attributedefdeposit(self, amount):if amount >0:
self.__balance += amount
print(f"Deposited ${amount}. New balance: ${self.__balance}")else:print("Deposit amount must be positive.")defwithdraw(self, amount):if0< amount <= self.__balance:
self.__balance -= amount
print(f"Withdrew ${amount}. New balance: ${self.__balance}")else:print("Insufficient funds or invalid amount.")def__update_balance(self, amount):# Private method
self.__balance += amount
deftransfer(self, amount, other_account):if0< amount <= self.__balance:
self.withdraw(amount)
other_account.__update_balance(amount)print(f"Transferred ${amount} to {other_account.account_holder}.")else:print("Insufficient funds or invalid amount.")Được hỗ trợ bởi
Đầu tiên, chúng ta tạo một BankAccountclass, bao bọc tất cả hành vi và chức năng dự định mà một đối tượng BankAccount cần có.
Lớp BankAccount có một thuộc tính private __balance và một phương thức private __update_balance:
Biến private (__balance): Đây là một thuộc tính của lớp BankAccount lưu số dư tài khoản hiện tại. Nó được đánh dấu là private bằng cách đặt tiền tố hai dấu gạch dưới (__). Điều này có nghĩa là nó chỉ được dự định truy cập trong nội bộ lớp. Ví dụ, nó được thay đổi bởi các phương thức deposit, withdraw và __update_balance. Không khuyến nghị truy cập thuộc tính này từ bên ngoài.
Phương thức private (__update_balance): Mục đích của phương thức này là cập nhật số dư tài khoản. Nó được gọi bởi phương thức transfer để cập nhật số dư của tài khoản nhận trong quá trình chuyển tiền. Việc dùng một phương thức private ở đây giúp đóng gói logic cập nhật số dư, đảm bảo rằng việc cập nhật chỉ được thực hiện theo những cách có kiểm soát do lớp định nghĩa.
Bạn có thể tạo một tệp Python mới, sao chép và dán đoạn mã trên và dưới đây, rồi chạy để tự quan sát.
# Using the Bank Account Solution
account1 = BankAccount("John Doe",1000)
account2 = BankAccount("Jane Doe",500)
account1.deposit(200)
account1.withdraw(100)
account1.transfer(300, account2)Được hỗ trợ bởi
Bạn sẽ thấy đầu ra bên dưới:
Deposited $200. New balance: $1200
Withdrew $100. New balance: $1100
Withdrew $300. New balance: $800
Transferred $300 to Jane Doe.Được hỗ trợ bởi
Chúc mừng ! Bạn đã tạo giải pháp BankAccount của mình bằng một phương thức private!
Dựa trên đầu ra, chúng ta thấy rằng khi thực hiện các thao tác ngân hàng thông thường như nạp tiền, rút tiền và chuyển tiền, hành vi hợp lý của một tài khoản ngân hàng được tuân thủ.
Phương thức __init__: có phải là phương thức private không?
Có lẽ bạn đã để ý phương thức __init__ được dùng trong ví dụ Tài khoản Ngân hàng. Vì nó cũng dùng cú pháp hai dấu gạch dưới, bạn có thể thắc mắc liệu nó có phải là phương thức private không.
Phương thức __init__ không được coi là phương thức private theo cách mà các phương thức có tiền tố hai dấu gạch dưới để biểu thị tính riêng tư.
Thay vào đó, nó thuộc nhóm các phương thức đặc biệt trong Python, thường được gọi là phương thức "dunder" (viết tắt của "double underscore"), có mục đích cụ thể trong ngôn ngữ. Các ví dụ khác về phương thức đặc biệt gồm __str__, __repr__ và __del__.
Hãy hiểu cách phương thức đặc biệt này được sử dụng trong ví dụ của chúng ta:
Như ta thấy, phương thức __init__ là constructor của một lớp. Nó được tự động gọi khi một instance mới của lớp được tạo, và dùng để khởi tạo các thuộc tính của đối tượng. Với lớp BankAccount, phương thức __init__ được dùng để thiết lập giá trị ban đầu cho các thuộc tính account_holder và __balance.
Khái niệm Nâng cao: Name Mangling trong Python
Trước đó trong phần định nghĩa, chúng ta đã đề cập rằng các phương thức private trong Python chỉ là một quy ước, và ngôn ngữ Python không áp đặt tính riêng tư nghiêm ngặt như một số ngôn ngữ lập trình khác.
Đúng như vậy, chúng ta thấy rằng các phương thức private có thể được truy cập trực tiếp khi dùng một dấu gạch dưới, nhưng việc truy cập bị hạn chế khi dùng hai dấu gạch dưới.
Tại sao vậy? Bởi một khái niệm gọi là “name mangling” trong Python.
Khi bạn đặt tiền tố cho tên thuộc tính bằng hai dấu gạch dưới, Python sẽ tự động sửa đổi tên bằng cách thêm một dấu gạch dưới đơn và tên lớp trước tên thuộc tính gốc.
Tên đã sửa đổi này là cách thuộc tính được lưu trữ nội bộ trong lớp. Quá trình sửa đổi tên theo cách này được gọi là name mangling.
Name mangling hữu ích vì hai lý do:
Ngăn xung đột tên: Trong kế thừa, nếu một lớp con định nghĩa một thuộc tính trùng tên với một thuộc tính trong lớp cha, hai thuộc tính sẽ xung đột. Name mangling giúp tránh vấn đề này bằng cách đảm bảo tên là duy nhất cho từng lớp.
Một mức độ riêng tư: Dù Python không có thuộc tính private thực sự, name mangling cung cấp một cách để làm cho thuộc tính khó truy cập hơn từ bên ngoài lớp, từ đó mang lại một mức độ riêng tư nhất định.
Hãy xem một ví dụ để hiểu rõ hơn.
classMyClass:def__init__(self):
self.__private_attribute ="I am private"def__private_method(self):print("This is a private method")
obj = MyClass()print(obj.__private_attribute)# This will raise an AttributeErrorĐược hỗ trợ bởi
Trong ví dụ này, __private_attribute và __private_method đã được name-mangle. Về nội bộ, chúng được lưu trữ dưới dạng _MyClass__private_attribute và _MyClass__private_method tương ứng. Cố truy cập chúng bằng tên gốc từ bên ngoài lớp sẽ dẫn đến AttributeError.
Tuy nhiên, bạn vẫn có thể truy cập chúng bằng tên đã bị mangle:
print(obj._MyClass__private_attribute)# This will print "I am private"
obj._MyClass__private_method()# This will print "This is a private method"Được hỗ trợ bởi
Mặc dù name mangling làm cho các thuộc tính khó truy cập hơn, điều quan trọng cần lưu ý là đây không phải là cách tuyệt đối để đảm bảo riêng tư trong Python. Nó thiên về quy ước để chỉ ra rằng một thuộc tính được dự định dùng nội bộ trong lớp.
Thực tiễn Tốt nhất khi Dùng Phương thức & Biến Private
Tận dụng hiệu quả các phương thức và biến private đòi hỏi tuân thủ một số thực tiễn tốt nhất. Những thực tiễn này giúp đảm bảo mã của bạn không chỉ hoạt động mà còn rõ ràng, dễ bảo trì và an toàn.
Dưới đây là một số thực tiễn nên làm theo:
Dùng một dấu gạch dưới cho thuộc tính “được bảo vệ” (Protected). Nếu bạn muốn chỉ ra rằng một thuộc tính hoặc phương thức dự định dùng trong lớp và các lớp con nhưng không cho sử dụng bên ngoài, hãy thêm tiền tố một dấu gạch dưới (_). Đây là quy ước trong Python cho biết thuộc tính hoặc phương thức là "protected" và không nên truy cập trực tiếp.
Dùng hai dấu gạch dưới cho thuộc tính “Private”. Nếu bạn muốn làm cho một thuộc tính hoặc phương thức khó truy cập hơn từ bên ngoài lớp để tránh vô tình sửa đổi hoặc sử dụng, hãy thêm tiền tố hai dấu gạch dưới (__). Điều này kích hoạt name mangling và khiến việc truy cập từ bên ngoài lớp trở nên khó hơn (nhưng không phải không thể).
Dùng phương thức private cho logic nội bộ. Các phương thức private (những phương thức có tiền tố một hoặc hai dấu gạch dưới) là cách tuyệt vời để đóng gói logic nội bộ của lớp. Hãy dùng chúng để thực hiện các tác vụ đặc thù cho triển khai của lớp và không nên phơi bày như một phần của giao diện công khai của lớp.
Cuối cùng, điều quan trọng là nhất quán với các thực tiễn mã hóa của bạn. Tuân thủ quy ước đặt tên và sử dụng nhất quán trong toàn bộ codebase. Điều này giúp mã của bạn dễ hiểu và dễ bảo trì hơn đối với các lập trình viên khác cũng như chính bạn trong tương lai.
Kết luận
Hướng dẫn này đã giới thiệu với bạn các khái niệm đằng sau phương thức private, cú pháp của chúng và thời điểm có thể sử dụng. Chúng ta cũng đã xem nhiều ví dụ minh họa cách bạn có thể sử dụng chúng trong dự án mã tiếp theo. Cuối cùng, chúng ta đã điểm qua một số thực tiễn tốt nhất cần ghi nhớ khi sử dụng.
Với vai trò nhà khoa học dữ liệu cao cấp, tôi thiết kế, phát triển và triển khai các giải pháp học máy quy mô lớn để giúp doanh nghiệp ra quyết định dựa trên dữ liệu hiệu quả hơn. Với vai trò tác giả về khoa học dữ liệu, tôi chia sẻ những bài học kinh nghiệm, lời khuyên nghề nghiệp và các hướng dẫn thực hành chuyên sâu.
Trong Lập trình Hướng đối tượng (OOP) — một cách tiếp cận thiết kế phần mềm — chúng ta dùng “đối tượng” để mô hình hóa các thực thể trong thế giới thực. Một đối tượng là một cấu trúc dữ liệu có thuộc tính (data) và phương thức (hàm) tác động lên dữ liệu đó. Các hệ thống phức tạp có thể dễ thiết kế hơn khi sử dụng đối tượng.
Tìm hiểu thêm về các nền tảng và khái niệm kỹ nghệ phần mềm đằng sau OOP bằng cách bắt đầu với khóa học lập trình hướng đối tượng với Python.
Đóng gói (encapsulation) là một khái niệm nền tảng trong OOP. Nó có nghĩa là nhóm dữ liệu và các phương thức của một đối tượng lại, đồng thời ẩn các chi tiết khỏi thế giới bên ngoài. Hãy xem đóng gói như một quá trình tạo ra một ‘viên nang’ (một đối tượng) với dữ liệu và cách thức thao tác dữ liệu riêng của nó.
Mục đích chính của đóng gói là:
Các phương thức private là chìa khóa để đạt được đóng gói bằng cách ẩn các chi tiết triển khai nội bộ của một lớp.
Khi biến một phương thức thành private, bạn nói với các lập trình viên khác rằng phương thức này không được dùng để truy cập trực tiếp. Điều này có thể ngăn lỗi và sai sót bằng cách đảm bảo rằng trạng thái nội bộ của một đối tượng chỉ được thay đổi theo những cách được kiểm soát.
Tại đây, chúng ta sẽ giới thiệu phương thức private, cú pháp để định nghĩa chúng, cách triển khai trong các ví dụ thực tế, và các thực tiễn tốt nhất khi sử dụng.
Phương thức Private là gì?
Phương thức private trong lập trình hướng đối tượng (OOP) là các hàm bên trong một lớp được thiết kế chỉ để sử dụng nội bộ. Chúng đóng gói chức năng của lớp, đảm bảo cơ chế hoạt động bên trong không bị can thiệp từ bên ngoài.
Sự đóng gói này tạo ra một lớp trừu tượng, cho phép lớp kiểm soát trạng thái và hành vi nội bộ, đồng thời có thể thay đổi cách triển khai mà không ảnh hưởng đến mã bên ngoài phụ thuộc vào nó.
Trong Python, quy ước để biểu thị phương thức private là đặt tiền tố tên phương thức bằng một dấu gạch dưới đơn (_) hoặc hai dấu gạch dưới (__). Điều này đóng vai trò như một gợi ý cho lập trình viên về phạm vi dự định của phương thức và chỉ là một quy ước.
Mặc dù quy ước này không cưỡng chế tính riêng tư nghiêm ngặt như ở một số ngôn ngữ khác, nó là một thực hành được cộng đồng Python tôn trọng để báo hiệu phạm vi sử dụng dự kiến của phương thức. Ở phần sau, chúng ta sẽ đi sâu hơn vào các khía cạnh này.
Cú pháp của Phương thức Private
Có hai cách khác nhau để định nghĩa phương thức private, chúng ta sẽ xem qua các ví dụ.
Chúng ta có thể định nghĩa một phương thức private bằng một dấu gạch dưới trước tên hàm:
Định nghĩa này chỉ là một quy ước dành cho lập trình viên vì hàm vẫn có thể được truy cập bên ngoài lớp, dù điều đó không được khuyến nghị.
Nếu đây là lần đầu bạn nghe về lớp trong Python, chúng tôi khuyến nghị xem trước hướng dẫn thân thiện cho người mới bắt đầu về Classes.
Hãy tạo một đối tượng và thử truy cập phương thức private đã tạo:
Có một cú pháp khác để định nghĩa phương thức private trong Python bằng hai dấu gạch dưới. Nó trông như sau:
Khi chúng ta cố gắng truy cập phương thức private từ bên ngoài lớp, nó ném ra AttributeError, báo hiệu rằng không thể truy cập trực tiếp bằng tên hàm.
Tóm tắt cú pháp phương thức private trong Python:
Triển khai Phương thức Private trong Python
Lấy ví dụ thực tế: hãy xem xét một lớp BankAccount an toàn và thân thiện để quản lý giao dịch tài chính cho một người dùng. Yêu cầu đối với tài khoản ngân hàng là:
Tất nhiên, tài khoản ngân hàng cần nhiều chức năng hơn như kiểm tra số dư, chuyển đổi tiền tệ và xử lý lãi suất — nhưng để đơn giản, chúng ta sẽ bỏ qua những phần này trong triển khai.
Hãy triển khai giải pháp này và cùng hiểu đoạn mã.
Đầu tiên, chúng ta tạo một
BankAccountclass, bao bọc tất cả hành vi và chức năng dự định mà một đối tượng BankAccount cần có.Lớp
BankAccountcó một thuộc tính private__balancevà một phương thức private__update_balance:__balance): Đây là một thuộc tính của lớpBankAccountlưu số dư tài khoản hiện tại. Nó được đánh dấu là private bằng cách đặt tiền tố hai dấu gạch dưới (__). Điều này có nghĩa là nó chỉ được dự định truy cập trong nội bộ lớp. Ví dụ, nó được thay đổi bởi các phương thứcdeposit,withdrawvà__update_balance. Không khuyến nghị truy cập thuộc tính này từ bên ngoài.__update_balance): Mục đích của phương thức này là cập nhật số dư tài khoản. Nó được gọi bởi phương thứctransferđể cập nhật số dư của tài khoản nhận trong quá trình chuyển tiền. Việc dùng một phương thức private ở đây giúp đóng gói logic cập nhật số dư, đảm bảo rằng việc cập nhật chỉ được thực hiện theo những cách có kiểm soát do lớp định nghĩa.Bạn có thể tạo một tệp Python mới, sao chép và dán đoạn mã trên và dưới đây, rồi chạy để tự quan sát.
Bạn sẽ thấy đầu ra bên dưới:
Chúc mừng ! Bạn đã tạo giải pháp BankAccount của mình bằng một phương thức private!
Dựa trên đầu ra, chúng ta thấy rằng khi thực hiện các thao tác ngân hàng thông thường như nạp tiền, rút tiền và chuyển tiền, hành vi hợp lý của một tài khoản ngân hàng được tuân thủ.
Phương thức __init__: có phải là phương thức private không?
Có lẽ bạn đã để ý phương thức
__init__được dùng trong ví dụ Tài khoản Ngân hàng. Vì nó cũng dùng cú pháp hai dấu gạch dưới, bạn có thể thắc mắc liệu nó có phải là phương thức private không.Phương thức
__init__không được coi là phương thức private theo cách mà các phương thức có tiền tố hai dấu gạch dưới để biểu thị tính riêng tư.Thay vào đó, nó thuộc nhóm các phương thức đặc biệt trong Python, thường được gọi là phương thức "dunder" (viết tắt của "double underscore"), có mục đích cụ thể trong ngôn ngữ. Các ví dụ khác về phương thức đặc biệt gồm
__str__,__repr__và__del__.Hãy hiểu cách phương thức đặc biệt này được sử dụng trong ví dụ của chúng ta:
Như ta thấy, phương thức
__init__là constructor của một lớp. Nó được tự động gọi khi một instance mới của lớp được tạo, và dùng để khởi tạo các thuộc tính của đối tượng. Với lớpBankAccount, phương thức__init__được dùng để thiết lập giá trị ban đầu cho các thuộc tínhaccount_holdervà__balance.Khái niệm Nâng cao: Name Mangling trong Python
Trước đó trong phần định nghĩa, chúng ta đã đề cập rằng các phương thức private trong Python chỉ là một quy ước, và ngôn ngữ Python không áp đặt tính riêng tư nghiêm ngặt như một số ngôn ngữ lập trình khác.
Đúng như vậy, chúng ta thấy rằng các phương thức private có thể được truy cập trực tiếp khi dùng một dấu gạch dưới, nhưng việc truy cập bị hạn chế khi dùng hai dấu gạch dưới.
Tại sao vậy? Bởi một khái niệm gọi là “name mangling” trong Python.
Khi bạn đặt tiền tố cho tên thuộc tính bằng hai dấu gạch dưới, Python sẽ tự động sửa đổi tên bằng cách thêm một dấu gạch dưới đơn và tên lớp trước tên thuộc tính gốc.
Tên đã sửa đổi này là cách thuộc tính được lưu trữ nội bộ trong lớp. Quá trình sửa đổi tên theo cách này được gọi là name mangling.
Name mangling hữu ích vì hai lý do:
Hãy xem một ví dụ để hiểu rõ hơn.
Trong ví dụ này,
__private_attributevà__private_methodđã được name-mangle. Về nội bộ, chúng được lưu trữ dưới dạng_MyClass__private_attributevà_MyClass__private_methodtương ứng. Cố truy cập chúng bằng tên gốc từ bên ngoài lớp sẽ dẫn đếnAttributeError.Tuy nhiên, bạn vẫn có thể truy cập chúng bằng tên đã bị mangle:
Mặc dù name mangling làm cho các thuộc tính khó truy cập hơn, điều quan trọng cần lưu ý là đây không phải là cách tuyệt đối để đảm bảo riêng tư trong Python. Nó thiên về quy ước để chỉ ra rằng một thuộc tính được dự định dùng nội bộ trong lớp.
Thực tiễn Tốt nhất khi Dùng Phương thức & Biến Private
Tận dụng hiệu quả các phương thức và biến private đòi hỏi tuân thủ một số thực tiễn tốt nhất. Những thực tiễn này giúp đảm bảo mã của bạn không chỉ hoạt động mà còn rõ ràng, dễ bảo trì và an toàn.
Dưới đây là một số thực tiễn nên làm theo:
_). Đây là quy ước trong Python cho biết thuộc tính hoặc phương thức là "protected" và không nên truy cập trực tiếp.__). Điều này kích hoạt name mangling và khiến việc truy cập từ bên ngoài lớp trở nên khó hơn (nhưng không phải không thể).Cuối cùng, điều quan trọng là nhất quán với các thực tiễn mã hóa của bạn. Tuân thủ quy ước đặt tên và sử dụng nhất quán trong toàn bộ codebase. Điều này giúp mã của bạn dễ hiểu và dễ bảo trì hơn đối với các lập trình viên khác cũng như chính bạn trong tương lai.
Kết luận
Hướng dẫn này đã giới thiệu với bạn các khái niệm đằng sau phương thức private, cú pháp của chúng và thời điểm có thể sử dụng. Chúng ta cũng đã xem nhiều ví dụ minh họa cách bạn có thể sử dụng chúng trong dự án mã tiếp theo. Cuối cùng, chúng ta đã điểm qua một số thực tiễn tốt nhất cần ghi nhớ khi sử dụng.
Để học thêm, bạn có thể xem Lộ trình Kỹ năng Python Programming và khóa học Lập trình Hướng đối tượng trong Python.