python 类变量和实例变量

#创建一个类,类里有类变量和实例变量

class A:
    n = "你好"
    list = []
    def __init__(self,name,list):
        self.name = name
        self.lista = list

不带self的n,list 是类变量,可以直接调用

  A.n      打印是"你好"
  a = A("我是a",[1,2,3])
  a.n    #你好
  a.name  #我是a
  此时将A加入新的全局变量
  A.str = "我是str"
  这时实例a也有str这个变量
  a.str   #我是str
  我们在创建一个实例
  b = A("我是b",[5,6,7])
  b.str = "我是B的str" 
  同时再修改A.str = "我是新的str"
  此时a.str 也同时修改为"我是新的str"
  b.str"我是B的str"

说明当实例修改了全局变量后,内存将存储实例的全局变量,无论class A的全局变量怎么修改,都不会发生变化,

self.name,
self.lista
属于实例变量

a.name   #为创建实例的参数,"我是a"
a.name = "我修改了a的name"
a.name  #打印新修改的变量,"我修改了a的name"
此时直接修改类的实例变量
A.name = "我是A的name"
a.name 不会发生改变,依然是"我修改了a的name"
结论,无论直接修改类A的实例self的变量,实例化a= A() ,a的属性都不会发生变化
如果A.n,A.list A.str  的全局变量发生修改
实例a = A() 都继承了修改后的值
除非a.n = "我是a的n" 将全局变量修改了,内存发生变化,都将不会随着A()的变化而变化

类的全局变量有什么用呢?

class person:
	city = "北京"
	def __init__(self,name):
		self.name = name

如果很多程序,都会调用这个Person 类
那么city相当于共享变量,在多的实例化都会用同一个变量,这样节省内存的开销



```python
class A(object):
    def __init__(self,name):
        self.name = name
        self.list = []
class B(A):
    def __init__(self,name):
        super(B,self).__init__(name) 
         
class D(object):
    def add(self,object):
        print(object.name)
        self.list.append(2)
        
class C(A,D):
    def __init__(self,name):
        super(C,self).__init__(name)   
b = B("b")         
c = C("c")
c.add(b)           

c.list  #输出是2

当C类继承 A,D两个类,C可以使用D的方法,同时方法调用C的list属性,将list添加2,并且将b类传入D类里,打印了b类的name属性       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值