局部
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 TestClass.val2 #會報錯。類不能訪問成員變量 print inst.val2 print inst.val3 #會報錯 print inst.val4 #會報錯 print inst.val5 #會報錯
val1是類變量,可以由類名直接調用,也可以由對象來調用;
val2是成員變量,可以由類的對象來調用,這里可以看出成員變量一定是以self.的形式給出的,因為self的含義就是代表實例對象;如果__init__內的變量沒有加self,那就變成一個__init__的局部變量;
val3不是成員變量,它只是函數fcn內部的局部變量;
val4和val5是成員變量,但並沒有初始化,所以這里會報錯
這個是能正確運行的
class TestClass(object): val1 = 100 def __init__(self): self.val2 = 200 def fcn(self,val = 400): val3 = 300 self.val4 = val self.val5 = 500 def add(self): self.fcn() result = self.val4 + self.val5 return result if __name__ == '__main__': inst = TestClass() print inst.add()
這個是不能正確運行的,因為fcn是對val4,val5初始化,這里沒運行fcn就沒初始化
class TestClass(object): val1 = 100 def __init__(self): self.val2 = 200 def fcn(self,val = 400): val3 = 300 self.val4 = val self.val5 = 500 def add(self): # self.fcn() result = self.val4 + self.val5 return result if __name__ == '__main__': inst = TestClass() print inst.add()
概括的一個例子
class TestClass(object): val1 = 100 def __init__(self): self.val2 = 200 def fcn(self,val = 400): val3 = 300 self.val4 = val self.val5 = 500 def add(self): self.val4 = 1 self.val5 = 2 result = self.val4 + self.val5 return result if __name__ == '__main__': inst = TestClass() print inst.add() print inst.val4 inst.fcn() print inst.val4
運行出來的結果:
可以看到,只要你對val4,val5初始化了就可以用實例訪問,證明這個帶self的是成員變量,不是局部變量。運行fcn后,對成員變量的值進行了改變。