• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > python中类变量与成员变量的使用注意点总结

python中类变量与成员变量的使用注意点总结

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了python 成员变量,python环境变量设置,python 环境变量,python 全局变量,python 静态变量等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前言

最近在用python写一个项目,发现一个很恶心的bug,就是同由一个类生成的两个实例之间的数据竟然会相互影响,这让我非常不解。后来联想到java的类有类变量也有实例变量,因此翻阅了相关资料,发现python也有类似的类变量和实例变量,下面来看看详细的介绍。

看下面的示例代码:

class A:
 x = 0
 def __init__(self):
 self.y = 0
</div>

x就是类变量,y就是实例变量。

原则上是没有错的,但是实际用的时候就发现一些恶心的问题(也就是我找了三天的bug)。。。比如下面的代码:

class A:
 x = []
 y = 0
 def __init__(self):
 pass
 def add(self):
 self.x.append('1')
 self.y+=1
a=A() 
print a.x,a.y
print A.x,A.y
a.add()
print a.x,a.y
print A.x,A.y
b=A() 
print b.x,b.y
print A.x,A.y
</div>

这里很明显x和y都是类变量,add的作用是分别对x和y做出修改。然后构造一个实例a,对实例a的值进行修改,最后构造实例b。

本以为这个结果是显而易见的,然而他输出的结果却是:

[] 0
[] 0
['1'] 1
['1'] 0
['1'] 0
['1'] 0
</div>

问题在哪?明明x和y都是类变量,在第二组print中为什么a.x和b.x一样,但是a.y和b.y就是不一样呢?

想了半天悟了一个道理。。。就是对于python来说,类变量的确是所有类共有的东西。但是那是在我们用的同一个引用的情况下,比如对于[]对象的append方法就是公用一个类变量了;但是对于赋值语句来说,如果在类中对类变量使用了赋值语句,那么python就会生成一个该对象的副本,以后的操作都是基于这个副本而不会对原来的类对象造成影响。这样就解释的通上面的现象了。

那么为了杜绝自己忘记类变量和实例变量的区别导致本不想公用变量的时候公用了变量,最好的办法就是在每个类中使用变量的时候重新初始化一下,这样就不会导致意外了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

</div>

您可能想查找下面的文章:

  • python中类变量与成员变量的使用注意点总结
  • python遍历类中所有成员的方法

相关文章

  • Python 匹配任意字符(包括换行符)的正则表达式写法
  • Python中字符串的修改及传参详解
  • python类参数self使用示例
  • Python中集合的内建函数和内建方法学习教程
  • python socket网络编程步骤详解(socket套接字使用)
  • Python简单格式化时间的方法【strftime函数】
  • python通过pil为png图片填充上背景颜色的方法
  • Python 冒泡,选择,插入排序使用实例
  • python爬虫入门教程之点点美女图片爬虫代码分享
  • python实现的简单RPG游戏流程实例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • python实现定制交互式命令行的方法
    • Python转换HTML到Text纯文本的方法
    • Python彩色化Linux的命令行终端界面的代码实例分享
    • Python随手笔记之标准类型内建函数
    • Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
    • 在Python的web框架中中编写日志列表的教程
    • Python的迭代器和生成器使用实例
    • Python 文件操作实现代码
    • Python编程中使用Pillow来处理图像的基础教程
    • python递归查询菜单并转换成json实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有