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:
Pendekatan ini menggunakan pengumpul sampah Python:
import gc for obj in gc.get_objects(): if isinstance(obj, some_class): print(obj)
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.
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)
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.
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!