简单分析python的类变量、实例变量

作者:不夜男人 时间:2022-12-20 20:39:56 

1、类变量、实例变量概念

类变量:

类变量就是定义在类中,但是在函数体之外的变量。通常不使用self.变量名赋值的变量。类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的。

实例变量:

实例变量是定义在方法中的变量,使用self绑定到实例上的变量,只是对当前实例起作用。

2、访问

类变量

在类的内部和外部类变量都可以直接使用className.类变量的形式访问。但是在类的内部,也可以使用self.类变量来访问,但是这个是用含义就不同了(后面使用代码验证)。

实例变量

在类的内部,实例变量self.实例变量的形式访问;在类的外部使用对象名。实例变量的形式访问。实例变量是绑定到一个实例上的变量,它只是属于这个绑定的实力。而区别类变量的就是类变量是所有的来自用一个类的实例所共享。我们看到这里会有这样的疑问!

如果说类变量对所有来自这个类的所有实例所共享,那么假如我一个实例去改变了这个类变量(假设使用这样的操作object.类变量 = value)的值,那么对于其他的实例是不是都是可见的?

答案是否定的,下面验证。


class A(object):
 # 定义一个类变量,初值是10
 class_var = 10
 print id(class_var)
 def foo(self):
 print '在类中访问类变量:A.class_var=', A.class_var
 print '在类中访问实例变量: self.class_var=', self, self.class_var

# 改变实例变量的值
 self.class_var = 40
 print '修改后访问类变量:A.class_var=', A.class_var
 print '修改后访问实例变量 self.class_var=',self, self.class_var

# 这里的class_var和函数外面的class_var不是同一个东西,这是一个局部变量
 class_var = 20
 print id(class_var)
 print 'class_var=', class_var

A.class_var = 15
 print 'A.class_var=', A.class_var
 print 'class_var=',class_var
 print 'self.class_var=',self.class_var

obj1 = A()
obj2 = A()
obj3 = A()
obj1.foo()
print A.class_var
print obj1.class_var
print obj2.class_var
print obj3.class_var

Output:


49964144
在类中访问类变量:A.class_var= 10
在类中访问实例变量: self.class_var= <__main__.A object at 0x0000000002FD2390> 10
修改后访问类变量:A.class_var= 10
修改后访问实例变量 self.class_var= <__main__.A object at 0x0000000002FD2390> 40
49963904
class_var= 20
A.class_var= 15
class_var= 20
self.class_var= 40
15
40
15
15

从上面运行的结果分析:当使用self.class_var形式访问类变量的之后,如果修改self.class_var的值,可以发现,类变量的值没有变化;不放心我们在修改类变量的值,发现self.class_var的值也没有受到影响。

从最后打印obj2和obj3这两个都来自于一个类的实例中的类变量都是和修改后的类变量一样,表示他们是共享类变量的。

3、总结

1、类变量可以使用className.类变量和self.类变量两种方式访问。
2、如果使用self.类变量的方式访问并重新赋值后,这个变量就会成为实例变量和self绑定,实际上就变成了一个实例变量,实例变量会屏蔽掉类变量的值。
3、类变量是共享的,最好使用类名的方式来访问类变量。
4、类变量通过sel访问时,就会被转化成实力变量,被绑定到特定的实例上。
5、实例变量(self)的形式对类变量重新赋值后,类变量的值不会随之变化。
6、实例变量对每一个对象是不可见的,每一个对象拥有着可能不同的值。

以上我们整理的知识点希望能够帮助到大家,感谢大家对脚本之家的支持。

来源:https://www.cnblogs.com/valorchang/p/11399932.html

标签:python,类变量,实例变量
0
投稿

猜你喜欢

  • kali 2021新手安装教程与配置图文详解

    2022-04-18 01:32:36
  • 前端模板引擎

    2010-07-27 12:33:00
  • 利用Python复制文件的9种方法总结

    2022-06-25 15:00:27
  • Python打包方法Pyinstaller的使用

    2022-06-08 13:25:21
  • Python增强赋值和共享引用注意事项小结

    2023-08-28 01:55:02
  • python构建基础的爬虫教学

    2023-09-28 04:24:38
  • 判断所使用的浏览器不仅仅是电脑浏览器代码整理

    2023-12-13 10:13:21
  • pandas groupby 用法实例详解

    2023-07-19 01:37:59
  • 利用Anaconda完美解决Python 2与python 3的共存问题

    2022-05-16 17:51:43
  • Python猴子补丁Monkey Patch用法实例解析

    2022-02-20 06:45:01
  • Python定时任务实现方案

    2021-05-05 04:11:54
  • 如何真正的了解python装饰器

    2023-03-16 09:08:23
  • MySQL应用技巧之存取权限

    2010-08-08 09:10:00
  • python实现微信自动回复机器人功能

    2023-12-30 01:01:40
  • 用javascript来实现仿gogle动画导航

    2007-11-30 14:15:00
  • 常见JS前端接口校验方式总结

    2024-04-17 10:00:00
  • python保留两位小数的3种方法实例

    2022-01-28 20:20:36
  • 使用zabbix监控mongodb的方法

    2024-01-21 05:13:16
  • 用virtualenv建立多个Python独立虚拟开发环境

    2023-10-28 06:24:07
  • sql server实现递归查询的方法示例

    2024-01-23 00:57:17
  • asp之家 网络编程 m.aspxhome.com