热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

类属性和实例属性php,Python的类属性和实例属性引发的一个坑

问题今天在项目中遇到了个奇怪的问题,实例的一个时间属性并没有根据时间变化而变化,分析之后恍然大悟,总结下分享给大家。大家先看一段代码&#x

8e5adf088197ece75efafbeed90e358c.png

问题

今天在项目中遇到了个奇怪的问题,实例的一个时间属性并没有根据时间变化而变化,分析之后恍然大悟,总结下分享给大家。大家先看一段代码:

import datetime

import time

class Person(object):

NOW = datetime.datetime.now()

def __init__(self):

self.now = self.NOW

def dosomething():

"""

使用self.now 处理了些逻辑

"""

if __name__=='__main__':

for i in range(10):

p = Person()

print(p.now)

time.sleep(1)

且不说代码的优劣,大家觉着最后的打印会是什么样的呢?按照逻辑分析,在for循环中实例化了Person类,而now属性是实例的属性,每次调用在循环中打印,输出的一定是当时循环执行到该次循环的时间,即10次循环打印出的时间是不一样的。然而结果是这样的:

2019-11-06 11:27:28.695771

2019-11-06 11:27:28.695771

2019-11-06 11:27:28.695771

2019-11-06 11:27:28.695771

2019-11-06 11:27:28.695771

2019-11-06 11:27:28.695771

2019-11-06 11:27:28.695771

2019-11-06 11:27:28.695771

2019-11-06 11:27:28.695771

2019-11-06 11:27:28.695771

分析

这里边体现了类属性和实例属性的区别。NOW 属于类属性,now属于实例属性。我们知道类属性可以被类和实例调用,实例属性只能被实例调用。我们在日常的业务逻辑开发中,并不会特意的去区分类属性和实例属性,而是直接使用实例来调用所有的属性,几乎不会使用类来调用属性。上边的代码在__init__中将类属性赋值给了实例属性,调用实例属性now时,间接的调用了类属性NOW。而类属性,在类加载的时候就执行了,即获取了当时的时间。它并不会随着实例的调用而改变。

总结

这里总结下类属性和实例属性的区别:

类属性可以被类和实例调用,实例属性只能被实例调用

类属性不会随着实例的调用而改变

类属性的有效作用域只有类,实例属性的有效作用域只有本实例(

有效作用域并非官方描述,而是我做的一个类比,大家可与作用域类别)。

其中第三句需要再解释下,当类属性被实例属性调用修改时,修改的只是实例作用域内的该属性值,并不会修改类的属性。大家可以看如下例子:

class Persion(object):

count = 0

def __init__(self):

self.name = '人'

if __name__ == '__main__':

p = Persion()

p.count += 1

print(p.count)

print(Persion.count)

# output

1

0

推荐阅读

更多关于类属性和实例属性的资料,大家可阅读如下资料:

https://www.python-course.eu/python3_class_and_instance_attributes.php

https://www.geeksforgeeks.org/class-instance-attributes-python/



推荐阅读
  • Java 中 ZonedDateTime 类的天数方法详解及示例代码 ... [详细]
  • Python进阶笔记:深入理解装饰器、生成器与迭代器的应用
    本文深入探讨了Python中的装饰器、生成器和迭代器的应用。装饰器本质上是一个函数,用于在不修改原函数代码和调用方式的前提下为其添加额外功能。实现装饰器需要掌握闭包、高阶函数等基础知识。生成器通过 `yield` 语句提供了一种高效生成和处理大量数据的方法,而迭代器则是一种可以逐个访问集合中元素的对象。文章详细解析了这些概念的原理和实际应用案例,帮助读者更好地理解和使用这些高级特性。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 使用Python代码高效生成大规模随机数据集(千万级) ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本文探讨了如何有效地构建和优化微信公众平台账号,涵盖了用户信息管理、内容创作与发布、互动策略及数据分析等方面。通过合理设置用户信息字段,如用户名、昵称、密码、真实姓名和性别等,确保账号的安全性和用户体验。同时,文章还介绍了如何利用微信公众平台的各项功能,提升用户参与度和品牌影响力。 ... [详细]
author-avatar
日月阁文玩都汇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有