Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Menghalang Data Kelas Dikongsi Antara Contoh Objek dalam Python?

Bagaimanakah Saya Boleh Menghalang Data Kelas Dikongsi Antara Contoh Objek dalam Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-24 06:02:24377semak imbas

How Can I Prevent Shared Class Data Among Object Instances in Python?

Mencegah Data Kelas Dikongsi Antara Kejadian

Dalam pengaturcaraan berorientasikan objek, adalah penting untuk mengekalkan data yang berbeza untuk kejadian kelas yang berbeza. Walau bagaimanapun, secara lalai, pembolehubah peringkat kelas dikongsi antara semua kejadian, yang boleh membawa kepada gelagat yang tidak dijangka.

Memahami Isu

Pertimbangkan kod berikut:

class a:
    list = []

x = a()
y = a()

x.list.append(1)
y.list.append(2)
x.list.append(3)
y.list.append(4)

print(x.list) # prints [1, 2, 3, 4]
print(y.list) # prints [1, 2, 3, 4]

Daripada mendapatkan senarai berasingan untuk x dan y, kedua-dua kejadian berkongsi senarai yang sama. Ini berlaku kerana senarai diisytiharkan sebagai pembolehubah kelas, jadi semua kejadian merujuk kepada objek asas yang sama.

Penyelesaian: Pembolehubah Contoh

Untuk mengelakkan data dikongsi, pembolehubah contoh harus dimanfaatkan. Pembolehubah contoh ditakrifkan dalam pembina (__init__) kelas. Berikut ialah kod yang diperbetulkan:

class a:
    def __init__(self):
        self.list = []

x = a()
y = a()

x.list.append(1)
y.list.append(2)
x.list.append(3)
y.list.append(4)

print(x.list) # prints [1, 3]
print(y.list) # prints [2, 4]

Dalam kes ini, atribut senarai dimulakan untuk setiap contoh dalam pembina, mencipta salinan berasingan. Pernyataan cetakan kini menggambarkan dengan tepat tingkah laku yang dimaksudkan dengan senarai yang berbeza untuk x dan y.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghalang Data Kelas Dikongsi Antara Contoh Objek dalam Python?. 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