赞
踩
Python中有比较常见的三种方法:
实例方法
定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);
调用:只能由实例对象调用。
类方法
定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);
调用:实例对象和类对象都可以调用。
静态方法
定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;
调用:实例对象和类对象都可以调用。
下面重点说一下静态方法。
通常情况下,在类中定义的所有函数都是对象的绑定方法,对象在调用绑定方法时会自动将自己作为参数(self)传递给方法的第一个参数。除此之外还有两种常见的方法:静态方法和类方法,二者是为类量身定制的,但是实例非要使用,也不会报错。
静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。可以理解为,静态方法是个独立的、单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。
- class MyClass:
- @staticmethod
- def spam(x,y,**kwargs): #注意没有self参数,不需要将实例自身隐性地传给函数
- pass
应用场景:编写类时需要采用很多不同的方式来创建实例,而我们只有一个__init__函数,此时静态方法就派上用场了。
- import time
-
-
- class Date:
- def __init__(self, year, month, day)
- self.year = year
- self.month = month
- self.day = day
-
- @staticmethod
- def now(): #该方法获取的是当前时间
- t = time.localtime()
- return Date(t.tm_year, t.tm_mon, t.tm_mday)
-
- @staticmethod
- def tomorrow(): #该方法获取的是明天的时间
- t = time.localtime(time.time() + 86400)
- return Date(t.tm_year, t.tm_mon, t.tm_mday)
-
-
- date = Date(2019, 03, 01)
- date1 = Date.now()
- date2 = Date.tomorrow()
如上,使用了静态方法(函数),然而方法体中并没使用(也不能使用)类或实例的属性(或方法)。若要获得当前时间的字符串时,并不一定需要实例化对象,此时对于静态方法而言,所在类更像是一种名称空间。
其实,我们也可以在类外面写一个同样的函数来做这些事,但是这样做就打乱了逻辑关系,也会导致以后代码维护困难。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。