定义类的方法,相信你会说,不就是在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的更多相关文章

  1. Python使用property函数定义属性访问方法如果不定义fget会怎么样?

    我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...

  2. Javascript中两种最通用的定义类的方法

    在Javascript中,一切都是对象,包括函数.在Javascript中并没有真正的类,不能像C#,PHP等语言中用 class xxx来定义.但Javascript中提供了一种折中的方案:把对象定 ...

  3. Python类中装饰器classmethod,staticmethod,property,

    @classmethod 有的时候在类中会有一种情况,就是这个方法并不需要使用每一个对象属性 因此 这个方法中的self参数一个完全无用的参数,使用classmethod class A: __cou ...

  4. python基础教程:定义类创建实例

    类的定义 在Python中,类通过class关键字定义,类名以大写字母开头 >>>class Person(object): #所有的类都是从object类继承 pass #pass ...

  5. python 使用exec执行定义好的方法,提示“name 'XXX' is not defined”

    文件A中的exec(),调到了文件B中的方法,提示name is not defined exec()调用时,提示方法没有定义 试过了的方法: 1.百度上说是局部变量或者是全局变量之间的文件,然后在e ...

  6. Python笔记(5)类__方法与继承

    方法 类方法@classmethod,实例方法,静态方法@staticmethod,特殊方法,__init__ 形式上的区别:调用是通过类和实例进行,不能直接调用,有自己的特殊参数,如__init__ ...

  7. Python 中的函数与类的方法

    注:本文转译自 Stackoverflow 上 Adding a Method to an Existing Object 的最佳回答. 在 python 中,def 定义的函数与类中的方法有很大的不 ...

  8. C#语法糖之第三篇: 匿名类 & 匿名方法

    今天时间有点早,所以上来在写一篇文章吧,继续上一篇的文章,在我们平时编程过程中有没有遇到过这样的一个情景,你定义的类只是用来封装一些相关的数据,但并不需要相关联的方法.事件和其他自定义的功能.同时,这 ...

  9. javascript定义类的方法总结

    1.构造函数法 类是对象的模板,定义了对象共有的方法属性数据 等,在javascript中一个函数就是一个对象,也可以看做一个类的构造方法. 所以我们可以像以下方式定义类: //1.经典的构造方法 Q ...

随机推荐

  1. 脚手架vue-cli系列四:vue-cli工程webpack的基本用法

    webpack的打包依赖于它的一个重要配置文件webpack.config.js,在这个配置文件中就可以指定所有在源代码编译过程中的工作了,就一个配置就可以与冗长的Gruntfile或者Gulpfil ...

  2. Linux学习笔记之十一————Linux常用服务器构建之ssh和scp

    一.ssh 1.ssh介绍 SSH为Secure Shell的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议. ...

  3. .net core Jenkins持续集成Linux、Docker、K8S

    jenkins插件 系统管理 -> 管理插件,安装如下插件. #如果搜索不到去掉Plugin在搜索 GitLab Plugin Gitlab Hook Plugin #使用Gitlab账号做用户 ...

  4. 从架构演进的角度聊聊Spring Cloud都做了些什么

    1.从架构演进的角度聊聊Spring Cloud都做了些什么?2.中小型互联网公司微服务实践-经验和教训3.Spring Cloud在国内中小型公司能用起来吗?

  5. linux有名管道fifo,进程间通信

    命名管道(FIFO)不同于无名管道之处在于它提供了一个路径名与之关联,以 FIFO 的文件形式存在于文件系统中,这样,即使与 FIFO 的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通 ...

  6. JAVA开发者的Golang快速指南

    Golang作为Docker.Kubernetes和OpenShift等一些酷辣新技术的首选编程语言,越来越受欢迎.尤其它们都是开源的,很多情况下,开源是非常有价值的.深入学习阅Golang等源代码库 ...

  7. SpringMvc @ResponseBody字符串中文乱码原因及解决方案

    今天突然发现一个问题,后来在网上也找到了很多解决思路,自己也查找到了问题所在,记录一下. @RequestMapping(value = "/demo1") @ResponseBo ...

  8. windows环境下pycharm如何设置Linux编码

    最近写代码一直在windows环境下,写完之后再传到Linux端就会出现代码格式错乱. 解决办法: 在windows端的pycharm代码格式设置为unix and os及可以解决这个问题. 如果你要 ...

  9. .12-浅析webpack源码之NodeWatchFileSystem模块总览

    剩下一个watch模块,这个模块比较深,先大概过一下整体涉及内容再分部讲解. 流程图如下: NodeWatchFileSystem const Watchpack = require("wa ...

  10. 在EF中执行SQL语句(转载)

    在EF中执行SQL语句   你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了.话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你根据条件删除 ...