一种方法类型叫做静态方法,在开发的时候, 可以使用类对方法进行封装,如果某一个方法需要访问到对象的实例属性,可以把这个方法封装成一个实例方法. 那如果某一个方法不需要访问对象的实例属性,但是需要访问到类的类属性,这个时候就可以考虑把这个方法封装成一个类方法. 一个实例方法, 一个类方法,这是两种方法类型,但是在开发中还有一种情况,如果要封装的某一个方法,既不需要访问到对象的实例属性,也不需要访问类的类属性,这个时候就可以考虑把这个方法封装成一个静态方法.
不访问实例属性也不访问类属性,这种情况在之前的案例演练中是有出现过的.
首先使用class关键字来定义一个Dog类,让Dog类继承自object这个基类,然后呢,老师使用def关键字在Dog 类中定一个run 的方法,一个简单的方法定义完成,
在run 方法下方有个灰色的虚线,
同时pycharm会提示run方法有可能是static,static就表示静态的意思,之所以会给这种提示,是因为现在完成的run 方法中,不需要访问到Dog类的类属性, 也不需要访问到狗对象的对象属性,因此pycharm提示, 如果不需要访问类属性,也不需要访问对象属性的时候,就可以考虑把这个方法定义成一个静态的方法.
定义静态方法的场景,明确之后, 那怎么样定义静态方法呢?如果我们想把某一个方法定义成静态方法,首先第1个需要注意的,这个方法不需要传递第1个参数,实例方法第1个参数是self,而类方法第1个参数是cls, self也好,cls也好,都是为了在方法内部可以方便的访问对象或者类的属性,而静态方法呢,既不需要访问实例属性,也不需要访问类属性,因此静态方法在定义时不需要指定第1个参数,同时呢为了让Python解释器,知道这个方法是一个静态方法,需要在def关键字上方再使用一个修饰符,@staticmethod,这个@staticmethod修饰符, 就可以告诉解释器, 在执行这个方法时,把它看作一个静态方法来处理,这个就是定义静态方法的语法.
那现在再让我们回到Pycharm,对run 方法做一个改造,run方法如果要定义成静态方法,并不需要传递第一个参数, 那现在就把self删掉,删掉之后再看Pycharm报了一个红色的虚线,
因为实例方法默认必须要以self作为第1个参数, 那如果想把这个方法定义成静态方法,就应该在run方法的上方使用@staticmethod, 增加一个修饰符,增加之后, Python解释器就会知道,这个方法只是一个静态方法,不需要传递第一个参数,所以增加了修饰符之后, pycharm就没有错误提示了,这个就是定义静态方法的方式.
一个静态方法定义完成,那怎么样调用静态方法呢只需要在主程序中啊,通过类名点的方式来调用静态方法,这种调用方式跟类方法的调用非常的类似.
现在就写一下Dog类这个类, 然后敲一个点,现在就选中run方法,
运行一下,能执行,"小狗要跑"已经在控制台输出了.
要调用静态方法不需要创建狗对象, 可以在没有任何对象的情况下, 就使用类来调用静态方法, 这一点呢,在使用静态方法时要注意,不需要创建对象,直接通过类名点的方式就可以调用静态方法了.
在开发时, 如果这个方法不访问实例属性也不访问类属性,这个时候就可以把方法定义成静态方法,静态方法不需要传递第1个参数,同时为了让解释器知道这个方法是一个静态方法,我们需要在def关键字上方增加一个静态方法的修饰符,@staticmethod, 这个就是静态方法的应用场景以及定义的方式.
class Dog(object):
@staticmethod
def run():
# 不访问实例属性/ 类属性
print("小狗要跑...")
# 通过类名.调用静态方法 - 不需要创建对象
Dog.run()
运行结果: