定义类的方法,相信你会说,不就是在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. Python模块学习 - Paramiko

    简介 ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography). 有了Paramiko以后,我们就可以在Py ...

  2. 1. Spring 框架简介及官方压缩包目录

    一.Spring 框架简介及官方压缩包目录介绍 1.主要发明者:Rod Johnson 2.轮子理论推崇者:     2.1 轮子理论:不用重复发明轮子.     2.2 IT 行业:直接使用写好的代 ...

  3. DDD实战进阶第一波(四):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架三)

    上一篇文章我们讲了经典DDD架构对比传统三层架构的优势,以及经典DDD架构每一层的职责后,本篇文章将介绍基础结构层中支持DDD的轻量级框架的主要代码. 这里需要说明的是,DDD轻量级框架能够体现DDD ...

  4. HTTPS到底是个什么鬼?

    HTTPS随处可见,那么它到底是个什么鬼?本文我们一起来探讨一下HTTPS为什么是安全的,以及HTTPS连接建立的过程. 一.HTTPS为什么是安全的? HTTP使用明文通信,可能会被第三方窃听.篡改 ...

  5. maven-assembly-plugin的使用

    maven-assembly-plugin使用描述(拷自 maven-assembly-plugin 主页) The Assembly Plugin for Maven is primarily in ...

  6. textarea 带换行符保存数据与带换行符展示数据

    毕业设计进行ing~ 最近要想要实现一个站内邮箱,想要带换行地输出邮件主体内容. 这两天为了解决这个问题百度了好多东西,发现相关问题有很多记录,可能这确实是大多数初学者也碰到的问题.自己找了好多地方都 ...

  7. TCP/IP 笔记 - 地址解析协议

    地址解析协议(ARP)提供了一种在IPv4地址和各种网络技术使用的硬件地址之间的映射.ARP仅用于IPv4,IPv6使用邻居发现协议,它被合并入ICMPv6.地址解析是发现两个地址之间的映射关系的过程 ...

  8. Kafka实战-Kafka Cluster

    1.概述 在<Kafka实战-入门>一篇中,为大家介绍了Kafka的相关背景.原理架构以及一些关键知识点,本篇博客为大家来赘述一下Kafka Cluster的相关内容,下面是今天为大家分享 ...

  9. 深入JAVA注解(Annotation):自定义注解 (转)

    原文出自:http://blog.csdn.net/yjclsx/article/details/52101922 一.基础知识:元注解 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义 ...

  10. python实现定时任务

    定时任务的实现方式有很多种,如windows服务,借助其他定时器jenkins运行脚本等方式.本文介绍的是python中的一个轻量级模块schedule. 安装 pip命令:pip install s ...