创建一个类的多个实例

7 浏览
0 Comments

创建一个类的多个实例

我创建了一个类。

class Type:
    p = []
    r = []
    s = []

然后,在主函数中我使用了它3次。第一次使用:

Short = Type()

然后我使用列表在其中添加一些数据。

第二次我声明它

Average = Type()

但是...此时,Short中的所有数据都跳到了Average中。就像是当正确地执行Short.p[0] = 2时,它会将其写入类本身... 我应该怎么解决这个问题?

0
0 Comments

问题的出现原因:

在上述代码中,变量'p'、'r'和's'被定义为类变量。类变量是在类定义中声明的,但不在方法中声明的变量。因此,它们可以通过类的实例(对象)或通过类名(类外部)访问。

解决方法:

要解决这个问题,我们需要创建类的多个实例,而不是共享类变量。

在上述代码中,我们定义了一个名为Type的类,并声明了三个类变量:p、r和s。然后,我们创建了两个Type的实例a和b。

我们可以看到,当我们通过实例a访问变量p时,它的值是一个空列表。然后,我们向a的p变量中添加了一个元素3,并再次访问它时,它的值变为[3]。然而,当我们通过实例b或通过Type类名访问变量p时,它们的值也变成了[3]。这说明类变量是被多个实例所共享的。

要解决这个问题,我们需要创建类的多个实例,而不是共享类变量。这可以通过在类的__init__方法中定义实例变量来实现。实例变量是在实例方法中声明的变量,每个实例都有自己的一份。

下面是修改后的代码示例:

>>> class Type:
...     def __init__(self):
...         self.p = []
...         self.r = []
...         self.s = []
...
>>> a = Type()
>>> a.p
[]
>>> a.p.append(3)
>>> a.p
[3]
>>> b = Type()
>>> b.p
[]
>>> Type.p
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'Type' has no attribute 'p'
>>> 

在修改后的代码中,我们在Type类的__init__方法中定义了实例变量p、r和s。这样,当我们创建Type的实例a和b时,它们各自拥有自己的p、r和s变量。因此,当我们通过a或b实例访问它们时,它们的值是独立的,并不会相互影响。另外,当我们尝试通过Type类名访问变量p时,会发生AttributeError,因为类不再具有p变量。

通过以上的修改,我们成功地解决了创建类的多个实例时共享类变量的问题。现在,每个实例都有自己独立的变量,避免了相互之间的干扰。

0