当前位置:   article > 正文

Python中的staticmethod_python staticmethod

python staticmethod

Python中有比较常见的三种方法:

实例方法

    定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);

    调用:只能由实例对象调用。

类方法

    定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);

    调用:实例对象和类对象都可以调用

静态方法

    定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;

    调用:实例对象和类对象都可以调用。

下面重点说一下静态方法。

       通常情况下,在类中定义的所有函数都是对象的绑定方法,对象在调用绑定方法时会自动将自己作为参数(self)传递给方法的第一个参数。除此之外还有两种常见的方法:静态方法和类方法,二者是为类量身定制的,但是实例非要使用,也不会报错。

       静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。可以理解为,静态方法是个独立的、单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。

  1. class MyClass:
  2. @staticmethod
  3. def spam(x,y,**kwargs): #注意没有self参数,不需要将实例自身隐性地传给函数
  4. pass

        应用场景:编写类时需要采用很多不同的方式来创建实例,而我们只有一个__init__函数,此时静态方法就派上用场了。

  1. import time
  2. class Date:
  3. def __init__(self, year, month, day)
  4. self.year = year
  5. self.month = month
  6. self.day = day
  7. @staticmethod
  8. def now(): #该方法获取的是当前时间
  9. t = time.localtime()
  10. return Date(t.tm_year, t.tm_mon, t.tm_mday)
  11. @staticmethod
  12. def tomorrow(): #该方法获取的是明天的时间
  13. t = time.localtime(time.time() + 86400)
  14. return Date(t.tm_year, t.tm_mon, t.tm_mday)
  15. date = Date(2019, 03, 01)
  16. date1 = Date.now()
  17. date2 = Date.tomorrow()

       如上,使用了静态方法(函数),然而方法体中并没使用(也不能使用)类或实例的属性(或方法)。若要获得当前时间的字符串时,并不一定需要实例化对象,此时对于静态方法而言,所在类更像是一种名称空间。

      其实,我们也可以在类外面写一个同样的函数来做这些事,但是这样做就打乱了逻辑关系,也会导致以后代码维护困难。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/903498
推荐阅读
相关标签
  

闽ICP备14008679号