Python的类成员变量


Python成员变量

定义的成员变量,如果通过类名访问,影响的是全局的静态变量
如果通过实例(self)访问,影响的是当前实例的对象
在所有成员函数之外直接定义的变量(不加self)将成为类变量
如果成员函数内通过self赋值过,则为实例变量
对于容器型数据结构,如列表、map、元组,类变量和实例变量的差异较大。如下程序:

   class c():
      w = 0
      s = []
  
      def __init__(self):
          pass
  
      def setw(self,x):
          self.w = x
  
      def appends(self,x):
          self.s.append(x)
  
  if __name__ == "__main__":
      a = c()
      b = c()
      a.setw(1)
      b.setw(2)
      a.appends(1)
      print(a.w)
      print(a.s)
      print(b.w)
      print(b.s)

此时输出为
1
[1]
2
[1]
在setw函数中,w的值通过self进行了赋值,此时w变成了实例变量
而对于s,虽然在成员函数中修改了s的内容,但没有给s赋值(我理解为变量指针没有改变,只是改变指针指向的地址里的内容),因此此时s仍然是类变量,对a实例中s的修改,影响了b实例
如果构造函数改为:

     def __init__(self):
         self.s = [1,2,3]

则输出为
1
[1, 2, 3, 1]
2
[1, 2, 3]
或者将appends函数改为:

def appends(self,x):
	self.s = [x]
	self.s.append(x)

此时输出为:
1
[1]
2
[]
此时s变成了实例变量,对a实例的修改不影响b实例
类变量可以通过类名直接访问,对于没有在成员函数内定义过的类变量,对其修改会影响所有的类实例


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM