避免 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("Instance X: ",x.listA)
print("Instance Y: ",y.listA)

输出

运行以上代码将得到以下结果:

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

使用 __init__ 的私有类变量

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

示例

 现场演示

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("Instance X: ",x.listA)
print("Instance Y: ",y.listA)

输出

运行以上代码将得到以下结果:

Instance X: [10, 30]
Instance 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("Instance X: ",x.listA)
print("Instance Y: ",y.listA)
Output

输出

运行以上代码将得到以下结果:

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

更新于: 2020-07-22

89 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告