避免在Python中的实例之间共享类数据

当我们在Python中实例化一个类时,其所有变量和函数也将继承到新的实例化类。但是在某些情况下,我们不希望父类的某些变量被子类继承。在本文中,我们将探讨两种方法。

实例化实例

在下面的示例中,我们显示如何从给定的类实例化变量,以及如何在所有实例化的类之间共享变量。

class MyClass:
   listA= []

# Instantiate Both the classes
x = MyClass()y = MyClass()# Manipulate both the classes
x.listA.append(10)
y.listA.append(20)
x.listA.append(30)
y.listA.append(40)

# Print Results
print("实例X: ",x.listA)
print("实例Y: ",y.listA)

输出结果

运行上面的代码给我们以下结果-

实例X: [10, 20, 30, 40]
实例Y: [10, 20, 30, 40]

带有__inti__的私有类变量

我们可以使用我需要的一种方法来将类中的变量设为私有。当实例化父类时,这些变量将不会在所有类之间共享。

示例

class MyClass:
   def __init__(self):
      self.listA = []

# Instantiate Both the classes
x = MyClass()y = MyClass()# Manipulate both the classes
x.listA.append(10)
y.listA.append(20)
x.listA.append(30)
y.listA.append(40)

# Print Results
print("实例X: ",x.listA)
print("实例Y: ",y.listA)

输出结果

运行上面的代码给我们以下结果-

实例X: [10, 30]
实例Y: [20, 40]

通过在外部声明变量

在这种方法中,我们将在类外部重新声明变量。由于变量再次被初始化,因此不会在实例化的类之间共享。

示例

class MyClass:
   listA = []

# Instantiate Both the classes
x = MyClass()y = MyClass()x.listA = []
y.listA = []
# Manipulate both the classes
x.listA.append(10)
y.listA.append(20)
x.listA.append(30)
y.listA.append(40)

# Print Results
print("实例X: ",x.listA)
print("实例Y: ",y.listA)
Output

输出结果

运行上面的代码给我们以下结果-

实例X: [10, 30]
实例Y: [20, 40]