蟒蛇;类实例

时间:2014-03-19 15:44:45

标签: python class

假设我有一个类,用3个类变量class1,var1,var2,var3,方法调用它__init__,它将传递的参数分配给类变量:

class class1(object):
    var1 = 0
    var2 = 0
    var3 = 0

    def __init__(self,a,b,c):
       class1.var1 = a
       class1.var2 = b
       class1.var3 = c

现在我将创建同一个类的两个实例:

obj1 = class1(1,2,3)
obj2 = class1(4,5,6)

现在,我们来看看变量值:

print (obj1.var1, obj1.var2,obj1.var3)
4 5 6
print (obj2.var1, obj2.var2,obj2.var3)
4 5 6

obj1不应该有值1,2,3吗?为什么第二个实例的__init__方法会在第一个实例(obj1)中更改vaues?以及如何创建一个类的两个独立的单独实例?

2 个答案:

答案 0 :(得分:4)

在类定义中声明的变量,但不在方法中,将是类变量。换句话说,它们对整个班级都是一样的。

要解决此问题,您可以在__init__方法中声明它们,以便它们变为实例变量

class class1():
    def __init__(self,a,b,c):
        self.var1 = a
        self.var2 = b
        self.var3 = c

答案 1 :(得分:2)

类变量由类的所有实例(以及类本身)共享。您需要使用实例变量。

>>> class class1(object):
...     def __init__(self,a,b,c):
...        self.var1 = a
...        self.var2 = b
...        self.var3 = c
...
>>> obj1 = class1(1,2,3)
>>> obj2 = class1(4,5,6)
>>> print (obj1.var1, obj1.var2,obj1.var3)
(1, 2, 3)
>>> print (obj2.var1, obj2.var2,obj2.var3)
(4, 5, 6)