Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tránh chia sẻ dữ liệu lớp giữa các instance trong Python

Khi khởi tạo một lớp trong Python, tất cả biến và hàm cũng được kế thừa bởi lớp instance mới. Nhưng có trường hợp không muốn một số biến của lớp cha được kế thừa bởi lớp con. Bài viết này khám phá hai cách để làm điều đó.

Ví dụ khởi tạo

Dưới đây cho thấy cách biến được kế thừa từ một lớp và cách biến được chia sẻ giữa tất cả các lớp instance.

class MyClass:
    listA = []
# Khởi tạo hai instance
x = MyClass()
y = MyClass()
# Thao tác trên cả hai instance
x.listA.append(10)
y.listA.append(20)
x.listA.append(30)
y.listA.append(40)
# In kết quả
print("Instance X:", x.listA)
print("Instance Y:", y.listA)

Kết quả

Instance X: [10, 20, 30, 40]
Instance Y: [10, 20, 30, 40]

Biến instance với __init__

Chúng ta có thể sử dụng phương thức __init__ để biến các biến bên trong lớp thành biến instance. Các biến này sẽ không được chia sẻ khi lớp cha được khởi tạo.

Ví dụ

class MyClass:
    def __init__(self):
        self.listA = []
# Khởi tạo hai instance
x = MyClass()
y = MyClass()
# Thao tác
x.listA.append(10)
y.listA.append(20)
x.listA.append(30)
y.listA.append(40)
# In kết quả
print("Instance X:", x.listA)
print("Instance Y:", y.listA)

Kết quả

Instance X: [10, 30]
Instance Y: [20, 40]

Khai báo biến bên ngoài

Trong cách này, chúng ta khai báo lại biến bên ngoài lớp. Khi biến được khởi tạo lại, chúng không bị chia sẻ giữa các instance.

Ví dụ

class MyClass:
    listA = []
# Khởi tạo
x = MyClass()
y = MyClass()
x.listA = []
y.listA = []
# Thao tác
x.listA.append(10)
y.listA.append(20)
x.listA.append(30)
y.listA.append(40)
print("Instance X:", x.listA)
print("Instance Y:", y.listA)

Kết quả

Instance X: [10, 30]
Instance Y: [20, 40]