zoukankan      html  css  js  c++  java
  • 洗礼灵魂,修炼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则可以不传递任何参数

  • 相关阅读:
    51nod 1122 机器人走方格 V4(矩阵乘法)
    51nod 1092 回文字符串
    51nod 1254 最大子段和 V2(递推)
    容斥原理求gcd为k的数对个数
    51nod 1115 最大M子段和 V3
    51nod 1053 最大M子段和 V2(贪心)
    洛谷P1792 [国家集训队]种树
    洛谷P1484 种树(反悔贪心,双向链表+堆)
    51 nod 1052 最大M子段和
    51 nod 1051 最大子矩阵和
  • 原文地址:https://www.cnblogs.com/Eeyhan/p/7750339.html
Copyright © 2011-2022 走看看