Bagaimanakah Saya Boleh Mengulangi Semua Contoh Kelas Python?

Patricia Arquette
Lepaskan: 2024-10-30 04:05:28
asal
1023 orang telah melayarinya

How Can I Iterate Over All Instances of a Python Class?

Menyala Atas Contoh Kelas Python

Apabila bekerja dengan pengaturcaraan berorientasikan objek dalam Python, mungkin terdapat situasi di mana anda perlu mengakses dan mencetak setiap contoh sesuatu kelas tertentu. Di sini kita menyelidiki dua kaedah untuk menyelesaikan tugas ini:

Pengumpul Sampah

Pendekatan ini menggunakan pengumpul sampah Python:

import gc
for obj in gc.get_objects():
    if isinstance(obj, some_class):
        print(obj)
Salin selepas log masuk

Kaedah ini mengimbas semua objek dalam ingatan, tetapi kelemahannya ialah prestasinya yang perlahan dengan sejumlah besar objek. Selain itu, ia mungkin tidak sesuai untuk jenis objek di luar kawalan anda.

Mixin dan Weakrefs

Kaedah alternatif memanfaatkan kelas campuran dan rujukan yang lemah:

from collections import defaultdict
import weakref

class KeepRefs(object):
    __refs__ = defaultdict(list)
    def __init__(self):
        self.__refs__[self.__class__].append(weakref.ref(self))

    @classmethod
    def get_instances(cls):
        for inst_ref in cls.__refs__[cls]:
            inst = inst_ref()
            if inst is not None:
                yield inst

class X(KeepRefs):
    def __init__(self, name):
        super(X, self).__init__()
        self.name = name

x = X("x")
y = X("y")
for r in X.get_instances():
    print(r.name)
del y
for r in X.get_instances():
    print(r.name)
Salin selepas log masuk

Di sini , setiap kejadian didaftarkan sebagai rujukan lemah dalam senarai. Walaupun pendekatan ini lebih cekap, ia memerlukan anda menggunakan kelas campuran dan memastikan pengamulaan yang betul.

Kesimpulan

Pilihan kaedah untuk mencetak semua kejadian kelas bergantung pada keadaan tertentu, mengambil kira faktor seperti bilangan objek, kawalan ke atas jenis objek dan keperluan prestasi. Kedua-dua kaedah yang dibentangkan di sini menyediakan penyelesaian yang boleh dilaksanakan untuk tugas ini.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengulangi Semua Contoh Kelas Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!