概述
在python中静态方法是比较特殊的方法(在java中,类方法就是静态方法)
应用场景
如果类中的方法,即 不需要访问 实例属性、也 不需要访问 类属性,那么就可以定义成静态方法。
一般用于工具方法,如:获取当前时间
定义
class 类名:
@staticmethod
def 方法名():
pass
- 方法上要有
@staticmethod修饰,表示静态方法 - 不需要有形参
self或者cls
调用
- 通过
类名.方法名()可以直接调用 - 也可以通过
对象.方法名()调用
例子
定义DateTimeUtil类,在该类中
- 定义
get_date()方法,返回 yyyy-MM-dd - 定义
get_time()方法,返回 hh : mm:ss
from datetime import datetime
class DateTimeUtil:
@staticmethod
def get_date():
return datetime.strftime(datetime.today(),"%Y-%m-%d")
@staticmethod
def get_time():
return datetime.strftime(datetime.today(),"%H:%M:%S")
print(DateTimeUtil.get_date())
print(DateTimeUtil.get_time())
dtu=DateTimeUtil()
print(dtu.get_date())
练习
实现get_days()方法,获取某一年的天数
代码:
@staticmethod
def get_days(year=None):
if year==None:
year=datetime.today().year
if type(year)!=int:
raise TypeError("请输入年份(数字类型)")
if (year%4==0 and year%100!=0) or year%400==0:
return 366
else:
return 365
静态方法和函数
既然静态方法和函数类似,为什么会用静态方法?
函数是面向过程的编程方式,如果函数过多,必然会造成函数名冲突,不方便管理、维护,所以将函数放入类中,让类去管理,就不会出现上面的问题
不能访问实例属性、类属性
在静态方法中,不像实例方法有形参self,也不像类方法有cls,所以不能访问类属性,也不能访问实例属性
总结
像上面例子中,获取日期、时间的代码(这些代码不需要访问实例属性、类属性),就适合定义成静态方法,方便调用,且封装在类中,便于管理。