Python 類變量,成員變量,靜態變量,局部變量


局部

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后,對成員變量的值進行了改變。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM