python面向对象-静态方法

概述

在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,所以不能访问类属性,也不能访问实例属性

总结

像上面例子中,获取日期、时间的代码(这些代码不需要访问实例属性、类属性),就适合定义成静态方法,方便调用,且封装在类中,便于管理。


原文出处:/show_1EF4EXaOiXjQ.html