Làm thế nào để bạn truy cập lớp bên ngoài của một phương thức trong python?

Đóng gói là một trong những khái niệm quan trọng trong lập trình hướng đối tượng. Nó đề cập đến ý tưởng gói dữ liệu và các phương thức hoạt động trong một đơn vị hoặc lớp. Do đó, nó giúp đặt các hạn chế truy cập trực tiếp vào các phương thức và biến để ngăn chặn việc sửa đổi dữ liệu. Có nhiều công cụ sửa đổi quyền truy cập giúp chúng tôi hạn chế như vậy và tránh các lớp khác để sử dụng các phương thức và biến phù hợp. Trong bài viết này, chúng ta hãy nghiên cứu chi tiết một trong những công cụ sửa đổi quyền truy cập có tên là Riêng tư với tất cả các thao tác và ví dụ cần thiết. Bắt đầu nào

Phương thức riêng tư trong Python là gì?

Phương thức riêng tư là một công cụ sửa đổi truy cập được sử dụng trong một lớp chỉ có thể được gọi từ bên trong lớp nơi nó được xác định. Điều đó có nghĩa là bạn không thể truy cập hoặc gọi các phương thức được định nghĩa trong lớp riêng tư từ bên ngoài

Hãy xem xét một ví dụ thực tế như một động cơ ô tô. Động cơ ô tô được tạo thành từ nhiều bộ phận khác nhau như van, tia lửa, pít-tông, v.v. Không người dùng nào có thể tự mình sử dụng các bộ phận này. Tình huống tương tự xảy ra với một phương thức riêng tư che giấu chức năng bên trong của lớp với thế giới bên ngoài

Hãy nhớ rằng ngay cả lớp cơ sở cũng không thể truy cập các phương thức của lớp riêng. Trong lập trình python, không có phương thức riêng tư nào không thể truy cập ngoại trừ bên trong lớp. Để xác định phương thức riêng tư, bạn phải thêm tiền tố tên thành viên bằng dấu gạch dưới kép [__]

Phương thức __init__[]

Phương thức riêng tư cơ bản trong Python là phương thức __init__[] được sử dụng làm hàm 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

Kiểm tra ví dụ bên dưới nơi chúng ta khai báo một lớp “Fruit” với hai thuộc tính và một phương thức __init__[]

class Fruit:

    name = ''
    quantity = 0

    def __init__[self, n, a]:

        self.name = n
        self.quantity = a

 

Bây giờ để truy cập phương thức __init__[] bên ngoài lớp, chúng ta cần truy cập nó từ đối tượng của lớp sau khi khởi tạo nó

Chẳng hạn, một tệp khác trong cùng thư mục tạo một thể hiện của lớp “trái cây” và gọi hàm tạo bằng tên lớp

sys.path.append["."]

from fruitClass import Fruit

fruit = Fruit["Apple", 10]

print[fruit.name, fruit.quantity]

 

Hãy nhớ rằng để nhập các lớp từ một tệp khác vào tệp hiện tại, bạn phải sử dụng “sys. đường dẫn. append[]” với thư mục đường dẫn chuỗi của lớp

Vì phương thức dựng sẵn đã được thảo luận, chúng ta hãy chuyển sang hiểu cách triển khai thực tế các phương thức riêng tư của riêng bạn

Xác định các phương thức và thuộc tính riêng tư

Để xác định một thuộc tính hoặc phương thức riêng tư trong python, bạn chỉ cần thêm tiền tố tên bằng một dấu gạch dưới [_]

Ví dụ, ở đây chúng ta có một lớp tên là "Class" và phương thức __init__ được định nghĩa với một thuộc tính “var” có giá trị bằng 2. Sau đó, phương thức get_var trả về giá trị của thuộc tính "var" bằng cách xác định một hàm như bên dưới

class Class:
  def __init__[self]:
    self.var = 2

  def get_var[self]:
    return self.var

 

Bây giờ, chúng ta sẽ viết lại ví dụ trên để biến “var” và “get_var” thành thuộc tính riêng tư

class Class:
  def __init__[self]:
    self._var = 2
  def _get_var[self]:
    return self._var

 

Khá đơn giản, phải không?

Khi chúng tôi cố gắng truy cập phương thức này, đầu ra của chương trình sẽ là 2. Chắc hẳn bạn đang thắc mắc rằng làm thế nào điều này có thể xảy ra bởi vì chúng ta không thể truy cập thuộc tính và phương thức private, phải không?

Trong python, quyền truy cập riêng vào các phương thức và thuộc tính riêng tư không được thực thi. Do đó, khi các thuộc tính bắt đầu bằng một dấu gạch dưới, đó chỉ là một quy ước và không phải là một quyết định bắt buộc

Python không hỗ trợ đóng gói nhưng điều đó không có nghĩa là bạn phải truy cập các phương thức được gán và có tiền tố gạch dưới. Ngoài ra, nếu bạn đang thiết kế thư viện hoặc lớp của riêng mình, bạn nên sử dụng tên biến có một dấu gạch dưới làm tiền tố để chỉ định rằng các thuộc tính và phương thức không được truy cập

Đây là tất cả về các tên có một dấu gạch dưới làm tiền tố, nhưng còn hai dấu gạch dưới hoặc không có dấu gạch dưới ở cuối thì sao?. Hãy thảo luận về điều đó ngay bây giờ

Tên Mangling

Hãy để chúng tôi xác định thuộc tính “var” và “get_var” từ ví dụ trên nhưng sử dụng dấu gạch dưới kép

Ví dụ

class Class:
  def __init__[self]:
    self.__var = 2

  def __get_var[self]:
    return self.__var

 

Khi bạn chạy chương trình trên, một lỗi sẽ được tạo ra với nội dung "không có thuộc tính nào như vậy “__var” khả dụng" mặc dù chúng tôi đã xác định giá trị của thuộc tính “var”

Lỗi này có thể khắc phục bằng cách thay tên lớp trước tên thuộc tính. Ví dụ: thuộc tính “var” trở thành “_Class__var” cho lớp trên. Tương tự, “get_var” trở thành “_Class__get_var”

Sự thay đổi này trong hành vi của thuộc tính được gọi là mangling. Do đó, python cung cấp một khái niệm đặc biệt có thể được sử dụng để gọi phương thức riêng từ bên ngoài lớp được gọi là mangling

Hãy nhớ rằng việc truy cập các biến của lớp riêng tư từ bên ngoài khó hơn bằng cách sử dụng xáo trộn tên, nhưng vẫn có thể truy cập thông qua “_Class__var”

Nhiều nhà phát triển và lập trình viên mắc lỗi khi sử dụng kỹ thuật xáo trộn tên để biểu thị các thuộc tính và phương thức riêng của lớp. Nhưng cần lưu ý rằng việc biểu thị các phương thức và thuộc tính riêng tư không phải là chức năng chính của việc xáo trộn tên

Sự kết luận

Đóng gói là khái niệm cơ bản nhất của lập trình python, cung cấp nhiều công cụ sửa đổi truy cập để bảo vệ lớp và phương thức của chúng ta khỏi thế giới bên ngoài. Phương thức riêng tư là một trong những công cụ sửa đổi quyền truy cập được mọi nhà phát triển sử dụng nhiều để bảo vệ mã và dữ liệu của họ khỏi những người khác. Bạn luôn nên tìm hiểu và hiểu các phương thức riêng tư khi muốn phát triển lớp hoặc thư viện của riêng mình trong lập trình python

Bạn có thể định nghĩa các phương thức bên ngoài lớp Python không?

Cách thông thường để thêm chức năng [phương thức] vào một lớp trong Python là định nghĩa các hàm trong phần thân của lớp. Có nhiều cách khác để thực hiện điều này có thể hữu ích trong các tình huống khác nhau. Phương thức cũng có thể được định nghĩa bên ngoài phạm vi của lớp .

Làm cách nào để gọi một hàm bên trong một lớp từ bên ngoài lớp bằng Python?

Làm thế nào để bạn gọi một hàm bên trong một lớp từ bên ngoài lớp trong Python? . create an instance of the class and then call an attribute of that instance [the test_def method].

Tôi có thể gọi các phương thức bên ngoài lớp không?

Tôi có thể gọi các phương thức bên ngoài lớp không? . Ví dụ: một phương thức được tạo bằng công cụ sửa đổi công khai có thể được gọi từ bên trong cũng như bên ngoài lớp/gói. a method can be invoked from another class based on its access modifier. For example, a method created with a public modifier can be called from inside as well as outside of a class/package.

Chủ Đề