Danh sách đơn Python

Singleton là một mẫu thiết kế quan trọng để lập trình hàng ngày và thường được sử dụng trong các dự án khác nhau

Mặc dù Singleton là một mẫu khá phổ biến trong Java, tuy nhiên, trong Python, nó không đơn giản như vậy và một Lớp Singleton có thể được triển khai theo nhiều cách khác nhau. Chúng ta sẽ khám phá những cách khác nhau để triển khai Singleton trong Python. Và đối với những người không thoải mái lắm với khái niệm Singleton Class, tôi đã cố gắng đưa ra một cái nhìn tổng quan ngắn gọn về nó bên dưới

Lớp Singleton là gì?

Lớp Singleton có nghĩa là một lớp sẽ chỉ có một thể hiện đối tượng. Nói một cách đơn giản, chỉ có thể khởi tạo một thể hiện đối tượng hoặc một đối tượng của lớp đó. Nó ẩn hàm tạo của lớp, để chỉ có thể tạo một thể hiện của lớp đó

Nguồn tạo hình ảnh. Mô tả đúng một thể hiện của một lớp

Tại sao lại là người độc thân?

Nó cung cấp quyền truy cập toàn cầu vào thể hiện của nó và nó có thể kiểm soát việc sử dụng các đối tượng thể hiện Lớp. Mẫu thiết kế Singleton trợ giúp trong nhiều trường hợp sử dụng trong thế giới thực

Ví dụ

  1. Nếu chúng ta cần tìm nạp dữ liệu cụ thể từ mỗi lệnh gọi API từ cơ sở dữ liệu, thì kết nối đến Cơ sở dữ liệu có thể được tạo Toàn cầu trong một gói vì các mô-đun khác nhau có thể truy cập phiên bản đối tượng đó của Lớp kết nối cơ sở dữ liệu
  2. Trường hợp sử dụng thứ hai là Ghi nhật ký. Như đã đề cập trong bài đăng StackOverflow này, Ghi nhật ký là một tiện ích tuyệt vời mà Singleton có thể được triển khai, vì các lớp khác nhau sẽ cần quyền truy cập vào Lớp nhật ký, do đó sẽ dễ dàng thực hiện các thao tác như tắt tất cả nhật ký, v.v.
  3. Có thể có nhiều chức năng tiện ích và sẽ phụ thuộc vào trường hợp sử dụng và cách mỗi Lớp tương tác với nhau

Lớp Singleton được triển khai trong Java như thế nào?

Triển khai lớp Singleton trong Java

Ba từ khóa quan trọng giúp triển khai dễ dàng mẫu thiết kế Lớp Singleton trong Java

1. Private object instance declaration (On line Number -> 3):
So that this object can only be accessible within the class and no other external module can edit this object directly.

thứ hai là

2. Private constructor (On line Number -> 4):
This is done so that no other object instance can be created from outside or using the new keyword.

thứ ba là

3. Making a static public function so that other external modules/java files can access this method to get the object/instance of the SingletonClass to perform operations or get some data value.

Do đó, 2 từ khóa quan trọng đã được sử dụng để triển khai Singleton trong Java

  1. Riêng tư
  2. tĩnh

Tuy nhiên, trong Python, chúng tôi không có từ khóa riêng tư. Sau đó, làm thế nào chúng ta có thể triển khai Mẫu thiết kế lớp Singleton trong Python?

Thời gian triển khai trong PythonMẫu thiết kế lớp Singleton được triển khai trong Python

Có rất nhiều cách để triển khai nhưng trong bài viết này tôi sẽ nói về hai cách tiếp cận chính thường được sử dụng để triển khai Mẫu thiết kế lớp Singleton trong Python

Hãy bắt đầu nào

1. Cách tiếp cận đầu tiên. Thực hiện đơn giản lớp Singleton

Cách tiếp cận đầu tiên khá đơn giản, chúng tôi sẽ kiểm tra xem đối tượng/thể hiện của lớp đó đã được tạo hay chưa. Nếu đúng như vậy, thì chúng tôi sẽ không cho phép tạo một thể hiện khác của lớp đó. Hãy xem đây là hành động

Triển khai lớp Singleton

Bạn có đoán được đầu ra của đoạn mã trên không?

accessing instance method
Exception will be raised

Như bạn có thể thấy trong đoạn mã trên, ở dòng số (20), nó đã cố gắng tạo một thể hiện mới của lớp Singleton, tuy nhiên, trong hàm tạo (dòng số 4), nó sẽ kiểm tra xem đã có một thể hiện hay chưa, nếu có

Trong python, dấu gạch dưới kép (__some_variable) trước khi biến hoạt động như một biến riêng, không thể truy cập biến này bên ngoài lớp, (mặc dù nó có thể được truy cập theo các cách khác, nhưng hiện tại tôi sẽ không đi sâu vào sự phức tạp của dấu gạch dưới kép). Do đó, không có mô-đun/Lớp nào khác có thể truy cập trực tiếp hoặc có thể sửa đổi nó. Ngoài ra, hàm tạo của chúng tôi trên dòng số (3) hoạt động như một hàm tạo riêng ảo

Điều này có nghĩa là mặc dù không có từ khóa riêng tư như chúng ta có trong Java, nhưng với logic điều kiện, chúng ta có thể kiểm tra xem thể hiện đã được tạo hay chưa, do đó, nó hoạt động như một hàm tạo riêng tư. Do đó, đoạn mã trên là cách triển khai đơn giản của lớp Singleton, tuy nhiên không phải là cách tốt nhất

2. Một cách tiếp cận khác để triển khai Lớp Singleton

Với sự trợ giúp của phương thức __new__ dunder, chúng ta có thể triển khai lớp Singleton. Tôi đã giải thích khái niệm về phương pháp __new__ dunder, dành cho những người chưa quen với nó, vola. tốt, tôi đã đề cập đến điều đó bên dưới

Q. Phương thức __new__ Dunder này trong Python là gì?

trả lời. Phương thức __new__ dunder là một phương thức Lớp được gọi trước phương thức __init__ (hàm tạo)

1# Phương thức __new__ được gọi để tạo đối tượng. Phương thức này luôn được gọi trước phương thức __init__. Nó lấy lớp làm đối số, vì nó phải tạo thể hiện của lớp đó. Theo mặc định, nó là một phương thức tĩnh. Không cần thêm trình trang trí phương thức tĩnh vào nó

Phương thức 2#__init__ được gọi để khởi tạo đối tượng

Bây giờ, chúng ta sẽ sử dụng tiện ích của phương thức __new__ Dunder để đạt được Mẫu thiết kế Singleton

Hãy xem hoạt động của phương thức __new__ và cách nó sẽ giúp chúng ta tạo một Lớp Singleton

Triển khai lớp Singleton với phương thức __new__

Bạn có đoán được đầu ra của câu lệnh in của đoạn mã trên không

get instance method called new method calledinit method is calledaccessing instance method

Trên Dòng (25), một phương thức tĩnh được gọi để lấy một thể hiện của lớp, sau đó nếu __private_instance chứa giá trị thể hiện, nó sẽ không tạo thể hiện mới, ngược lại, nó sẽ tạo thể hiện mới bằng cách gọi lớp Singleton (Trực tuyến (19) . Do đó, trước tiên, nó chuyển sang phương thức __new__ và tạo một thể hiện mới trên dòng số (7), sau đó, nó chuyển sang phương thức __init__ để khởi tạo bất kỳ giá trị nào cho đối tượng thể hiện. Sau đó, Trên dòng số (26), một đối tượng gọi phương thức thể hiện và in ra “truy cập phương thức thể hiện”

Bây giờ, hãy thử tạo một thể hiện đối tượng khác trong ví dụ trên, điều gì sẽ xảy ra?

Triển khai mẫu thiết kế Singleton

Như bạn có thể thấy, bây giờ tôi đã thêm Singleton() (trên Line (27)) để tạo đối tượng của Singleton Class. Điều gì sẽ là sự thay đổi trong đầu ra bây giờ?

tôi sẽ nói. chờ đã, đừng cuộn xuống, trước tiên hãy thử đoán đầu ra

Đầu ra cho ví dụ mã trên là

get instance method callednew method calledinit method is calledaccessing instance methodnew method called

Như bạn có thể thấy không phải do lệnh gọi Singleton() trên dòng(27), đầu tiên nó chuyển sang phương thức __new__, tuy nhiên vì đã có một thể hiện được tạo cho lớp Singleton, do đó, nó không tạo một thể hiện khác và trả về Không có,

Cuối cùng. Chúng tôi đã hoàn thành và học cách triển khai Singleton (Nguồn Gif. https. // giphy. com/gifs/2wYrkKvETbAwWAM4Gy/embed)

Phần kết luận

Mẫu Singleton là một mẫu thiết kế quan trọng và mặc dù tôi đã chỉ ra 2 cách tiếp cận chính để triển khai giống nhau, tuy nhiên nó có thể được triển khai theo những cách khác nhau

Danh sách đơn Python là gì?

Singleton là mẫu thiết kế sáng tạo, đảm bảo rằng chỉ có một đối tượng thuộc loại này tồn tại và cung cấp một điểm truy cập duy nhất tới đối tượng đó cho bất kỳ mã nào khác. Singleton has almost the same pros and cons as global variables. Although they're super-handy, they break the modularity of your code.

Là gì [. ] trong Python?

Các [. ] tạo một bản sao nông của mảng , do đó cho phép bạn sửa đổi bản sao của mình mà không làm hỏng bản gốc. Lý do điều này cũng hoạt động đối với các chuỗi là trong Python, Chuỗi là các mảng byte đại diện cho các ký tự Unicode.

Có một singleton trong Python?

Mẫu Singleton trong python là một mẫu thiết kế cho phép bạn chỉ tạo một phiên bản của một lớp trong suốt vòng đời của chương trình . Sử dụng một mẫu đơn có nhiều lợi ích. một vài trong số họ là. Để giới hạn quyền truy cập đồng thời vào một tài nguyên được chia sẻ.

Danh sách Python có thứ tự hay không có thứ tự?

Các đặc điểm quan trọng của danh sách Python như sau. Danh sách được sắp xếp . Danh sách có thể chứa bất kỳ đối tượng tùy ý nào. Các phần tử danh sách có thể được truy cập theo chỉ mục.