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后,对成员变量的值进行了改变。

posted @   有梦就要去实现他  阅读(2857)  评论(1编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示