Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Melaksanakan Corak Singleton dalam Python untuk Pembalakan?

Bagaimana untuk Melaksanakan Corak Singleton dalam Python untuk Pembalakan?

DDD
DDDasal
2024-12-20 05:08:09830semak imbas

How to Implement a Singleton Pattern in Python for Logging?

Implementasi Singleton dalam Python

Singleton ialah corak reka bentuk yang memastikan hanya satu contoh kelas yang pernah dibuat. Berikut ialah cadangan untuk melaksanakan singleton dalam Python:

Gunakan Metaclass

Kaedah ini menawarkan beberapa kelebihan:

  • Tingkah laku kelas sebenar
  • Pengendalian automatik terhadap warisan
  • Petunjuk jelas singleton dengan menggunakan metaclass
class Singleton(type):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
        return cls._instances[cls]

class Logger(object):
    __metaclass__ = Singleton

Pembetulan kepada Kaedah Lain

Dalam jawatan asal, pelaksanaan kelas asas tidak betul. Ia memerlukan rujukan _instances pada kelas, menggunakan super(), dan membetulkan baharu untuk menjadi kaedah statik yang mengambil kelas sebagai hujah.

Bila Gunakan Singletons

Walaupun terdapat perdebatan tentang keinginan mereka, singletons sesuai untuk beberapa situasi:

  • Pemalar: Mereka bertindak seperti pemalar global, yang umumnya dianggap boleh diterima kerana ia tidak boleh diubah oleh pengguna.
  • Data Tenggelam Sahaja : Singleton yang menerima data secara eksklusif (seperti pembalak) tidak menimbulkan risiko yang sama seperti keadaan kongsi, kerana mereka tidak boleh menukar sistem atau mempengaruhi pengguna lain.

Dalam senario yang dibentangkan, di mana pengelogan adalah kes penggunaan, corak tunggal ialah pilihan yang sesuai.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Corak Singleton dalam Python untuk Pembalakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn