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

python类方法和静态方法总结

前言:方法:方法是动态的是对象的行为,比如一个人可以跑,跳,是指具体做了什么动作或者行为属性:属性是固有的是对象本身多携带的

前言:
方法:方法是动态的是对象的行为,比如一个人可以跑,跳,是指具体做了什么动作或者行为
属性:属性是固有的是对象本身多携带的比如一个人的年龄,名字

类属性和实例属性
1.类属性就相当于全局变量是类对象和实例对象所共有的属性
2.实例对象的属性为实例对象所私有的

class Test(object):Lx = 'python'__age = 27def __init__(self,age):self.age = agepasstest = Test(20)
print(test.age) # 实例对象查看实例属性 正常访问
print(test.Lx) # 实例对象查看类属性 正常访问
print(Test.Lx) # 类对象查看类属性 正常访问
print(Test.age) # 类对象查看实例属性,这里会报错print(test.__age) #错误,不能在类外通过实例对象访问私有的类属性
print(Test.__age) #错误,不能在类外通过类对象访问私有的类属性#运行结果
20
python
python
------报错------
------报错------
------报错------

综上:
1.类对象可以访问类属性
2.类对象不能访问实例属性
3.实例对象可以访问实例属性和类属性,和类属性是包含关系

类方法和实例方法对比
1.类方法:类对象所拥有的方法,需要用装饰器@classmethod来标识其为类方法,类方法的第一个参数必须是类对象,类方法可以通过类对象和实例对象调用,类似与类属性可以被类对象和实例对象调用一样
2.实例方法:实例方法的第一个参数是实例对象self,通过self引用类属性或者实例属性,但是在相同名称的类属性和实例属性中,会先调用实例属性,因为实例属性优先级更高

class Test:name = 'Lx'# 类方法 用classmethod来装饰@classmethoddef quety_name(cls):return cls.name # 访问类属性@classmethoddef change_name(cls,info):cls.name=info # 在类方法中修改类属性return cls.name@classmethoddef get_name(cls):return Test.name # 通过类对象引用类属性print(Test.quety_name()) # 类对象调用类方法
print(Test.change_name("kobe")) # 类对象修改类属性
print(Test.get_name()) # 类对象调用类属性
test = Test()
print(test.change_name('James')) # 实例对象调用类方法输入结果
Lx
kobe
kobe
James

注意点:
1…cls 指向 类对象(也就是Test)
2.一般以cls作为第一个参数,cls 也可以是其他名称,但是一般默认为cls

静态方法:
1.静态方法不需要额外定义参数,所以在静态方法中引用类属性的话,必须使用类对象的方法来引用
2.Python中的静态方法与python类级别的方法极为相似,不同之处在于静态方法绑定到一个类而不是该类的对象。这意味着可以在没有该类对象的情况下调用静态方法。 这也意味着静态方法无法修改对象的状态,因为它们没有绑定到对象。

创建静态方法有两种方式:

第一种:class Test:def get_result(x,y):result = x + yreturn result
Test.get_result = staticmethod(Test.get_result)
print("result:",Test.get_result(1,2))输出
result: 3第二种:class Test:@staticmethoddef get_result(x,y):result = x + yreturn resultprint("result:",Test.get_result(1,2))输出
result: 3

1.静态方法有一个非常明确的用例。 当我们需要某些功能而不是对象,而需要完整的类时,我们可以使方法静态化。 当我们需要创建Utility方法时,这是非常有利的,因为它们通常与对象生命周期无关。
2.请注意,在静态方法中,我们不需要将self作为第一个参数传递。

# 打印当前系统时间
import time
class Time:@staticmethoddef showTime():return time.strftime("%H:%M:%S",time.localtime())passprint(Time.showTime())


推荐阅读
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • andr ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 本文详细介绍了Python中文件的基本操作,包括打开、读取、写入和关闭文件的方法,并通过实例展示了如何将Excel文件转换为CSV文件以及进一步转换为HTML文件。此外,还涉及了成绩等级替换的具体实现。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
author-avatar
豪哥帅366
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有