洗礼灵魂,修炼python(47)--巩固篇—定义类的方法之@classmethod,@staticmethod
定义类的方法,相信你会说,不就是在class语句下使用def () 就是定义类的方法了嘛,是的,这是定义的方法的一种,而且是最普通的方式
首先,我们已经知道有两种方式:
1.普通方法:
1)与类无关的方法
2)与类相关的方法:
能够被类直接调用的方法,而实例化因为没有self绑定,会把自身作为参数传参而报错
2.实例方法:
像这种必须实例化才能调用的方法,就是实例方法
其实还有两种方法,其实在上一篇博文里有伏笔的,我打开的@property的官方文档截图里就有的——@staticmethod,@classmethod,这两种方式也可以定义方法,那分别代表啥意思呢?接着看
@staticmethod
1.什么是@staticmethod
看英文单词,翻译过来就是静态方法,静态方法是一种普通函数,位于类定义的命名空间中,不会对任何实例类型进行操作。静态方法和在普通的非class的method作用是一样的,只不过是命名空间是在类里面。一般使用场景就是和类相关的操作,但是又不会依赖和改变类、实例的状态
2.怎么使用:
python为我们内置了函数staticmethod来把类中的函数定义成静态方法
3.作用:
- 代码易读性.静态方法并不需要self参数
- 节约内存.不用每个实例都实例化方法.
- 在类内部控制静态方法.不然的话换一种实现方法,把函数放在在类外部......
@classmethod
1.什么是@classmethod
同样的,翻译英文就是类方法,就是可以被类直接使用的方法,不需要实例化给实例化对象使用的方法
2.怎么使用:
1):
看到了吗?类对象A,也可以直接使用class_test方法,而不需要实例化给对象再使用。是的,classmethod装饰的方法类也可以直接用,并且其内第一个参数是 cls,即代表类自身,如同self一样
看了上面的例子,相信你应该有所了解了。
2):既然使用@classmethod之后类就可以直接使用方法,我们知道在python中,一切皆对象,所以可以将类调用的方法赋值给另一个对象,这就是构造:
当然我这里只是作为打印使用,你可以给定你希望的结果,并赋值给其他对象。
3):@classmethod也可以被子类继承
3.作用:
@classmethod为python提供额外的构造器,主要用途是作为构造函数。Python只有一个构造函数__new__,如果想要多种构造函数就很不方便。只能在new里面写一堆代码。
有classmethod之后就可以用classmethod来写不同的构造函数,并且可以类与类之间进行交互等等。
@classmethod和@staticmethod的区别
虽然@classmethod和@staticmethod非常的相似,但是两者在具体的使用上还是有着细微的差别:classmethod必须使用类对象cls作为第一个参数,而staticmethod则可以不传递任何参数
洗礼灵魂,修炼python(47)--巩固篇—定义类的方法之@classmethod,@staticmethod的更多相关文章
- Python使用property函数定义属性访问方法如果不定义fget会怎么样?
我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...
- Javascript中两种最通用的定义类的方法
在Javascript中,一切都是对象,包括函数.在Javascript中并没有真正的类,不能像C#,PHP等语言中用 class xxx来定义.但Javascript中提供了一种折中的方案:把对象定 ...
- Python类中装饰器classmethod,staticmethod,property,
@classmethod 有的时候在类中会有一种情况,就是这个方法并不需要使用每一个对象属性 因此 这个方法中的self参数一个完全无用的参数,使用classmethod class A: __cou ...
- python基础教程:定义类创建实例
类的定义 在Python中,类通过class关键字定义,类名以大写字母开头 >>>class Person(object): #所有的类都是从object类继承 pass #pass ...
- python 使用exec执行定义好的方法,提示“name 'XXX' is not defined”
文件A中的exec(),调到了文件B中的方法,提示name is not defined exec()调用时,提示方法没有定义 试过了的方法: 1.百度上说是局部变量或者是全局变量之间的文件,然后在e ...
- Python笔记(5)类__方法与继承
方法 类方法@classmethod,实例方法,静态方法@staticmethod,特殊方法,__init__ 形式上的区别:调用是通过类和实例进行,不能直接调用,有自己的特殊参数,如__init__ ...
- Python 中的函数与类的方法
注:本文转译自 Stackoverflow 上 Adding a Method to an Existing Object 的最佳回答. 在 python 中,def 定义的函数与类中的方法有很大的不 ...
- C#语法糖之第三篇: 匿名类 & 匿名方法
今天时间有点早,所以上来在写一篇文章吧,继续上一篇的文章,在我们平时编程过程中有没有遇到过这样的一个情景,你定义的类只是用来封装一些相关的数据,但并不需要相关联的方法.事件和其他自定义的功能.同时,这 ...
- javascript定义类的方法总结
1.构造函数法 类是对象的模板,定义了对象共有的方法属性数据 等,在javascript中一个函数就是一个对象,也可以看做一个类的构造方法. 所以我们可以像以下方式定义类: //1.经典的构造方法 Q ...
随机推荐
- scrapy 框架入门
运行流程 官网:https://docs.scrapy.org/en/latest/intro/overview.html 流程图如下: 组件 1.引擎(EGINE):负责控制系统所有组件之间的数据流 ...
- Java:类的构造函数
类的构造函数 类的构造函数特点: 1. 构造函数也称为构造方法,构造函数名和类名相同. 2. 构造函数不能有返回值,也不能用void声明. 3. 构造函数可以有参数,也可以无参数,在一个类 ...
- 最全的maven的pom.xml文件详解
pom.xml代码: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...
- 喜大普奔,SITE4J网站上线啦
喜大普奔,SITE4J网站上线啦: 你懂的:https://peterchenhdu.club/
- 死锁排查的小窍门 --使用jdk自带管理工具jstack
本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 开发时间久了,难免会写出一些一些死锁的代码,自己明明调用该方法可该方法就是不执行.不进该方法.日志也不打 ...
- Kafka实战-数据持久化
1.概述 经过前面Kafka实战系列的学习,我们通过学习<Kafka实战-入门>了解Kafka的应用场景和基本原理,<Kafka实战-Kafka Cluster>一文给大家分享 ...
- Spring Boot + Spring Cloud 构建微服务系统(六):熔断监控集群(Turbine)
Spring Cloud Turbine 上一章我们集成了Hystrix Dashboard,使用Hystrix Dashboard可以看到单个应用内的服务信息,显然这是不够的,我们还需要一个工具能让 ...
- 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\106f9ae8\cc0e1169\App_global.asax.haz99mum.dll”--“拒绝访问。 ”
在本地开发环境没问题,但是发布到服务器出现:未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Fil ...
- vue.js的项目实战
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由蔡述雄发表于云+社区专栏 需求背景 组件库是做UI和前端日常需求中经常用到的,把一个按钮,导航,列表之类的元素封装起来,方便日常使用, ...
- [深度学习]CNN--卷积神经网络中用1*1 卷积有什么作用
1*1卷积过滤器 和正常的过滤器一样,唯一不同的是它的大小是1*1,没有考虑在前一层局部信息之间的关系.最早出现在 Network In Network的论文中 ,使用1*1卷积是想加深加宽网络结构 ...