python学习笔记之--类的三种方法
时间:2019-10-22
本文章向大家介绍python学习笔记之--类的三种方法,主要包括python学习笔记之--类的三种方法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
方法:
1)实例方法
2)类方法
3)静态方法
示例:
#encoding=utf-8 class Foo: def __init__(self, name): self.name = name def ord_func(self): """ 定义普通方法,至少有一个self参数 """ # print self.name print ('普通方法') @classmethod def class_func(cls): """ 定义类方法,至少有一个cls参数 """ print ('类方法') @staticmethod def static_func(): """ 定义静态方法 ,无默认参数""" print ('静态方法') f=Foo("吴老师") f.ord_func() Foo.class_func() f.class_func() Foo.static_func() f.static_func()
#实例方法:参数要有self
实例方法使用的时候必须要实例化
调用方法:
①只能通过实例来调用,实例.get_name()
思考:实例方法为什么不能通过类名来调用?Person.get_name()-----调用的时候会传一个self,而用类来调用没有实例化self找不到对象地址
class Person: def __init__(self,name,gender): self.name = name self.gender = gender def get_name(self): #实例方法,必须要实例化才能使用 return self.name #调用实例方法的第一种写法:直接用类名+实例化调用 print(Person("吴老师","Male").get_name()) #但是这种方法实例没有存到变量里,所以只能使用一次 #调用实例方法的第二种写法:1.先做实例化;2.用实例名+方法名 wulaoshi = Person("吴老师","Male") #实例化 print(wulaoshi.get_name())
#类方法:用classmethod来声明类方法,需要加默认参数cls
类方法使用的时候不需要实例化
调用方法:
①通过类名来使用,类名.get_instance_count()
②也可以通过实例调用,实例对象.get_instance_count()
class Person: count = 0 #类变量 def __init__(self,name,gender): self.name = name self.gender = gender Person.count +=1 def get_name(self): return self.name #类方法:可以使用类变量,不能使用实例变量-----这是为什么呢?:参数没有self,找不到实例的地址,因此不能用实例变量 @classmethod #加classmethod才能标识为类方法 def get_instance_count(cls): return Person.count @classmethod def create_a_instance(cls): return Person("张","女") #类方法里虽然不可以使用实例变量,但是可以创建实例 print(Person.count) Person("吴老师","Male") print(Person.count) print(Person.get_instance_count()) #用类调用 print(Person("吴老师","Male").get_instance_count()) #用实例调用
C:\Users\dell\Desktop\练习\6>py -3 0616.py
0
1
1
2
#静态方法:用staticmethod来声明,不需要加默认参数self和cls
调用方法:
①类名调用,类名.get_nation()
②实例来调用,实例.get_nation()
class Person: count = 0 #类变量 nation = "中国" def __init__(self,name,gender): self.name = name self.gender = gender Person.count +=1 def get_name(self):#实例方法,必须要实例化 return self.name @staticmethod #静态方法:不需要self和cls def get_nation(): return Person.nation print(Person.get_nation()) #类名调用 print(Person("吴老师","Male").get_nation()) #实例调用
总结:
三种方法的区别:
1 实例方法,参数要有self,必须通过实例化的对象去调用。
2 类方法,要加上@classmethod来声明,参数至少有一个,一般定义为cls,使用类变量,不能使用实例变量。通过类名或者实例对象调用。
3 静态方法,要加上@staticmethod来声明,可以没有参数,使用类变量,不能使用实例变量。通过类名或者实例对象调用。
什么时候该使用哪种方法?
不想做实例化,且只操作类变量:类方法、静态方法
如果想使用实例变量,只能使用实例方法了。
#一个静态方法应用的场景例子:
class FileUtil: @staticmethod def get_file_name(file_path): with open(file_path) as fp: return fp.name @staticmethod def get_file_content(file_path): with open(file_path,encoding="utf-8") as fp: return fp.read() print(FileUtil.get_file_name("e:\\a.txt")) print(FileUtil.get_file_content("e:\\a.txt"))
原文地址:https://www.cnblogs.com/wenm1128/p/11716219.html
- 未来AI可能会淘汰180万个工作岗位,你感到恐惧了吗
- css基础:把所有背景图都集成在一张图片上,减少图片服务器请求次数
- Docker可视化界面(Consul+Shipyard+Swarm+Service Discover)部署记录
- windows 2008上启用防火墙后sqlserver 2005经常出现连接超时的解决办法
- 重温delphi之控制台程序:Hello World!
- Docker集中化web界面管理平台-Shipyard部署记录
- "Goole项目托管"及"CodePlex发布开源项目"要点
- Docker网络解决方案-Calico部署记录
- c#中开发ActiveX的学习笔记
- Android新手之旅(4) 通过HTTP访问web
- Flash/Flex学习笔记(9):ActionScript3.0与Javascript的相互调用
- Flash/Flex学习笔记(8):ActionScript3.0中的面对对象
- Docker网络解决方案-Weave部署记录
- Flash/Flex学习笔记(7):FMS3.5基于IIS的安装
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用ffmpeg压缩视频之烦和fun
- 一文学会 Web Service漏洞挖掘!
- 【实战项目代码分享】计算机视觉入门教程&实战项目代码
- Linux部署DNS服务器
- 【C++简明教程】C++简介与环境配置
- PDF 的各种操作,我用 Python 来实现(附网站和操作指导)
- Python中map()函数用法
- 谈谈不同思路下造就的不同产品与公司形态
- OpenCV 处理中文路径、绘制中文文字的烦恼,这里通通帮你解决!
- 如何快速分析大型系统架构?
- Linux小技巧、文件查找、修改、读取
- 我在赏金计划中发现的RACE条件漏洞
- 哦!数组还能这么用,学到了!
- 【C++简明教程】随机数生成
- Pytest标记预期失败得测试用例@pytest.mark.xfail()