2014-03-19 81 views
1

假設我有一類,稱之爲class1,與3類變量var1,var2,var3,__init__方法,其中分配中傳遞給類變量:Python;類實例

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__第二個實例的方法在第一個實例中改變了vaues(obj1)?以及如何製作兩個獨立的課程單獨實例?

+0

您專門* *使這些類,而不是實例屬性。如果您需要實例屬性,請使用例如'self.var1 = a',並且移除'__init__'之外的賦值。 – jonrsharpe

+0

在這裏看到http://stackoverflow.com/questions/68645/static-class-variables-in-python?rq=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) 
4

在類定義聲明的變量,但不是方法內,將類變量。換句話說,他們對全班同樣如此。

爲了解決這個問題,你可以在__init__方法聲明他們,使他們成爲實例變量

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