先看看下面這段**:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class
testclass(
object
):
val1
=
100
def
__init__(
self
):
self
.val2
=
200
def
fcn(
self
,val
=
400
):
val3
=
300
self
.val4
=
val
self
.val5
=
500
if
__name__
=
=
'__main__'
:
inst
=
testclass()
print
testclass.val1
print
inst.val1
print
inst.val2
print
inst.val3
print
inst.val4
print
inst.val5
這裡,val1是類變數,可以由類名直接呼叫,也可以有物件來呼叫;
val2是成員變數,可以由類的物件來呼叫,這裡可以看出成員變數一定是以self.的形式給出的,因為self的含義就是代表例項物件;
val3不是成員變數,它只是函式fcn內部的區域性變數;
val4和val5也都不是成員變數,雖是以self.給出,但並沒有在建構函式中初始化。
再看看下面的**(#號後面的是執行結果):
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
inst1
=
testclass()
inst2
=
testclass()
print
testclass.val1
# 100
print
inst1.val1
# 100
inst1.val1
=
1000
print
inst1.val1
# 1000
print
testclass.val1
# 100
testclass.val1
=
2000
print
inst1.val1
# 1000
print
testclass.val1
# 2000
print
inst2.val1
# 2000
inst3
=
testclass()
print
inst3.val1
# 2000
可以發現:python的類變數和c++的靜態變數不同,並不是由類的所有物件共享。類本身擁有自己的類變數(儲存在記憶體),當乙個testclass類的物件被構造時,會將當前類變數拷貝乙份給這個物件,當前類變數的值是多少,這個物件拷貝得到的類變數的值就是多少;而且,通過物件來修改類變數,並不會影響其他物件的類變數的值,因為大家都有各自的副本,更不會影響類本身所擁有的那個類變數的值;只有類自己才能改變類本身擁有的類變數的值。
Python類變數和成員變數
先上一段 class test x num 4 num 1 y 5 def init self,num self.num num defchange self,num test.num num test.x num 21 deftest self self.x 12 self.y 15 a test...
python的類變數和成員變數
先看看下面 python view plain copy class testclass object val1 100 def init self self val2 200def fcn self val 400 val3 300 self val4 val self val5 500if na...
類的成員變數和例項變數
class classout out mem out mem def init self inner mem inner mem self.inner mem self.inner mem self.inner mem self.inner mem self.out mem self.out mem...