浅谈python 中类属性共享的问题

 更新时间:2019年07月02日 09:22:33   作者:Young丶  
今天小编就为大家分享一篇浅谈python 中类属性共享的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

感觉这种理解有问题,举个例子来说。

class Dog(object): 
 
  name = 'dog' 
 
  def init(self): 
 
    self.age = 18
 
d1 = Dog()
 
d2 = Dog()

这里有两个实例 d1,d2 吧。

d1.name # 输出 dogd2.name # 输出 dogd1.name = 'abc'
d1.name # 输出 abcd2.name # 输出 dogDog.name # 输出 dog

原因是 d1.name 输出 dog 不是因为这个实例共享了类属性,而是因为这个实例没有 dog 属性,所以 python 查找了类属性。但是一旦你修改了 d1.name 相当于给 d1 实例绑定了 name 属性之后,d1.name 就与类属性无关了。既然这样就谈不上实例之间共享类属性了,因为只要一赋值,就相当于绑定了属性,则上述 d1.name 的含义和 d2.name 的含义就不同了,它们的值也不同,很明显它们的数据没有共享。

但是要修改类属性,应该用

Dog.name = 'new name'

而不应该是

dog1.name = 'new name'

因为实例属性同名而覆盖类属性,的确是一个很容易忽视、出错的地方。

>>> class Dog():
...  name = "dog"
... 
>>> d1 = Dog()
>>> d1.name
'dog'
>>> d2 = Dog()
>>> d2.name
'dog'
>>> Dog.name
'dog'
>>> Dog.name = "a"
>>> d.name
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
NameError: name 'd' is not defined
>>> d1.name
'a'
>>> d2.name
'a'
>>> 

以上这篇浅谈python 中类属性共享的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python机器学习之基于Pytorch实现猫狗分类

    Python机器学习之基于Pytorch实现猫狗分类

    看了许多关于PyTorch的入门文章,大抵是从torchvision.datasets中自带的数据集进行训练,导致很难把PyTorch运用于自己的数据集上,真正地灵活运用PyTorch,本文详细介绍了怎么利用Pytorch实现猫狗分类,需要的朋友可以参考下
    2021-06-06
  • Python bytes string相互转换过程解析

    Python bytes string相互转换过程解析

    这篇文章主要介绍了Python bytes string相互转换过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • python查看数据类型的方法

    python查看数据类型的方法

    在本篇文章里小编给大家整理了关于python怎么查看数据类型的相关知识点,有需要的朋友们学习下。
    2019-10-10
  • Python中类的定义、继承及使用对象实例详解

    Python中类的定义、继承及使用对象实例详解

    这篇文章主要介绍了Python中类的定义、继承及使用对象,较为详细的分析了Python中类的相关概念与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • 提高Python代码可读性的5个技巧分享

    提高Python代码可读性的5个技巧分享

    Python 中有许多方法可以帮助我们理解代码的内部工作原理,良好的编程习惯,可以使我们的工作事半功倍!本文为大家总结了五个技巧,希望有所帮助
    2022-08-08
  • 部署Python的框架下的web app的详细教程

    部署Python的框架下的web app的详细教程

    这篇文章主要介绍了Python部署web app的详细教程,示例代码基于Python2.x版本,需要的朋友可以参考下
    2015-04-04
  • Python虚拟环境库virtualenvwrapper安装及使用

    Python虚拟环境库virtualenvwrapper安装及使用

    这篇文章主要介绍了Python虚拟环境库virtualenvwrapper安装及使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Flask核心机制之上下文源码剖析

    Flask核心机制之上下文源码剖析

    这篇文章主要介绍了Flask核心机制之上下文源码剖析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Pytorch nn.Unfold() 与 nn.Fold()图码详解(最新推荐)

    Pytorch nn.Unfold() 与 nn.Fold()图码详解(最新推荐)

    这篇文章主要介绍了Pytorch nn.Unfold() 与 nn.Fold()图码详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Python正则表达式匹配和提取IP地址

    Python正则表达式匹配和提取IP地址

    这篇文章主要介绍了Python正则表达式匹配和提取IP地址的实例代码,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06

最新评论