浅谈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编程使用有限状态机识别地址有效性

    Python编程使用有限状态机识别地址有效性

    这篇文章主要介绍了Python编程中如何使用有限状态机识别地址有效性,如何识别一个地址是否有效,确切的讲,如何编程识别一个中国地址是否有效
    2021-09-09
  • 使用python3构建文件传输的方法

    使用python3构建文件传输的方法

    今天小编就为大家分享一篇使用python3构建文件传输的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • 给Python中的MySQLdb模块添加超时功能的教程

    给Python中的MySQLdb模块添加超时功能的教程

    这篇文章主要介绍了给Python中的MySQLdb模块添加超时功能的教程,timeout功能在服务器的运维当中非常有用,需要的朋友可以参考下
    2015-05-05
  • 深入探讨Pandas数据清洗与高效分析

    深入探讨Pandas数据清洗与高效分析

    这篇文章主要介绍了深入探讨Pandas数据清洗与高效分析,Pandas 是 Python 中最强大的数据处理库之一,广泛应用于数据分析、统计建模和科学计算领域,本文将深入探讨 Pandas 的高阶用法,包括数据清洗、高效的数据操作以及与机器学习结合的应用
    2021-10-10
  • Python绑定方法与非绑定方法详解

    Python绑定方法与非绑定方法详解

    这篇文章主要为大家详细 介绍了Python绑定方法与非绑定方法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Pandas中如何对DataFrame列名进行重命名

    Pandas中如何对DataFrame列名进行重命名

    在做数据挖掘的时候,想改一个DataFrame的column名称,所以就查了一下,下面这篇文章主要给大家介绍了关于Pandas中如何对DataFrame列名进行重命名的相关资料,需要的朋友可以参考下
    2023-04-04
  • Python运算符&=使用实例探究

    Python运算符&=使用实例探究

    这篇文章主要为大家介绍了Python运算符&=使用实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • python打印n位数“水仙花数”(实例代码)

    python打印n位数“水仙花数”(实例代码)

    这篇文章主要介绍了python打印n位数“水仙花数”,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 一文带你深入理解Python的`functools.lru_cache`装饰器

    一文带你深入理解Python的`functools.lru_cache`装饰器

    Python中的functools.lru_cache装饰器是一个非常有用的装饰器,它可以帮助我们优化递归函数,避免重复计算已经计算过的值,在这篇文章中,我们将探讨 functools.lru_cache 的工作原理以及如何使用它,感兴趣的朋友跟着小编一起来学习吧
    2023-07-07
  • 机器学习实战之knn算法pandas

    机器学习实战之knn算法pandas

    这篇文章主要为大家详细介绍了机器学习实战之knn算法pandas,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06

最新评论