python实例变量和类变量的区别_Python类变量和实例变量区别

类变量:定义在类里面,通过类名或对象名引用,如果是通过对象名引用,会先找有没有这个同名的实例变量,如果没有,引用到的才是类变量,类变量的更新,只能通过类名,形如 类名.a = 55 ,不要指望通过实例引用类变量来更新类变量

实例变量:定义在方法里面的变量,一般在__init__里面,只能通过对象名引用,实例变量的增加、更新形式,形如self.a = 55

实例变量(静态属性)【实例名.实例变量名】

1、实例变量是构造函数下的变量带self.变量

2、实例变量为每个实例本身独有,不可相互调用、新增、修改、删除,不可被类调用、新增、修改、删除

3、可以访问类变量

4、如果同时有类变量和实例变量,程序执行时,先访问实例变量,实例变量存在,会使用实例变量,实例变量不存在,会使用类变量

5、实例改类变量,不可修改,实际是在实例内存里创建了实例变量

6、新增、修改、删除实例变量n,不会影响到类变量n

7、a实例不能调用b实例的变量

8、实例变量可修改、新增、删除

类变量【类名.类变量名】

1、类变量在class内,但不在class的方法内,存在类的内存里

2、类变量是该类所有实例共享的变量,但是实例对象只能访问,不可修改,每个实例对象去访问同一个类变量都将得到相同结果【实例名.类变量名】

3、新增、修改、删除类变量n,不会影响到实例变量n

4、类无权访问实例名

5、类变量可修改、新增、删除class Test(object):

name='类的姓名' #类变量

address='类的地址'

def __init__(self,name,age,sex):

self.name=name #实例变量

self.age=age

self.sex=sex

def test1(self):

print(self.name,Test.address)

def test2(self):

pass

Test1=Test('test1实例的姓名',22,'男')

Test2=Test('test2实例的姓名',33,'女')

print(Test1.name,Test1.address)

print(Test2.name,Test2.address)

print(Test.name)

print(Test.age)

#实验证明

#1、实例变量为每个实例独有,不可相互调用、新增、修改、删除,不可被类调用、新增、修改、删除

#2、如果同时有类变量和实例变量,程序执行时,先访问实例变量,实例变量存在,会使用实例变量,实例变量不存在,会使用类变量

#3、类无法访问实例变量

"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py

test1实例的姓名 类的地址

Traceback (most recent call last):

test2实例的姓名 类的地址

File "C:/Users/wangli/PycharmProjects/Test/Test/test.py", line 98, in

类的姓名

print(Test.age)

AttributeError: type object 'Test' has no attribute 'age'

Process finished with exit code 1class Test(object):

name='类的姓名' #类变量

address='类的地址'

def __init__(self,name,age):

self.name=name #实例变量

self.age=age

def test1(self):

print(self.name,Test.address)

def test2(self):

pass

Test1=Test('test1实例的姓名',22)

print('新增test1实例变量address为:test1实例的地址')

Test1.address='test1实例的地址' #新增实例变量

print('新增后test1实例变量address:',Test1.address)

print('新增后类变量address:',Test.address,'\n')

print('修改前test1实例变量age:',Test1.age)

print('修改test1实例变量age22为11')

Test1.age=11

print('修改后test1实例变量age:',Test1.age,'\n')

print('新增类变量age为:30')

Test.age=30 #新增类变量

print('新增后test1实例变量age:',Test1.age)

print('新增后类变量age:',Test.age,'\n')

print('修改前类变量address:',Test.address)

print('修改类变量address类的地址为上海市')

Test.address='上海市'

print('修改后类变量address:',Test.address,'\n')

#实验证明

#1、实例变量可修改、新增、删除

#2、类变量可修改、新增、删除

#3、新增、修改、删除实例变量n,不会影响到类变量n

#4、新增、修改、删除类变量n,不会影响到实例变量n

"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py

新增test1实例变量address为:test1实例的地址

新增后test1实例变量address: test1实例的地址

新增后类变量address: 类的地址

修改前test1实例变量age: 22

修改test1实例变量age22为11

修改后test1实例变量age: 11

新增类变量age为:30

新增后test1实例变量age: 11

新增后类变量age: 30

修改前类变量address: 类的地址

修改类变量address类的地址为上海市

修改后类变量address: 上海市

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值