Python面向对象 | 静态方法 staticmethod

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Python面向对象 | 静态方法 staticmethod

PythonGirl   2019-11-16 我要评论

 

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

 

譬如,我想定义一个关于时间操作的类,其中有一个获取当前时间的函数。使用了静态方法,然而方法体中并没使用(也不能使用)类或实例的属性(或方法)。若要获得当前时间的字符串时,并不一定需要实例化对象,此时对于静态方法而言,所在类更像是一种名称空间。其实,我们也可以在类外面写一个同样的函数来做这些事,但是这样做就打乱了逻辑关系,也会导致以后代码维护困难。

import time

class TimeTest(object):
    def __init__(self, hour, minute, second):
        self.hour = hour
        self.minute = minute
        self.second = second

    # 各种方法省略

    @staticmethod  # 静态方法
    def showTime():
        return time.strftime("%H:%M:%S", time.localtime())


print(TimeTest.showTime())

t = TimeTest(2, 10, 10)
print(t.showTime())

'''
执行输出:
21:05:43
21:05:43
'''

 

看下面代码,一半是面向过程,一半是面向对象。对于完全面向对象编程而言,不允许出现面向过程的代码。完全面向对象编程。先登录后实例化。还没有一个具体的对象的时候 就要执行login方法,这样是不合理的。需要将login()变成静态方法。

def login():pass
    #username
    #password
    #身份 -- 实例化

class Student:
    def __init__(self,name):pass
    def login(self):pass 

 

python为我们内置了函数staticmethod来把类中的函数定义成静态方法,它不需要实例化。所以,连self参数都没有。

class Student:
    def __init__(self,name):pass

    @staticmethod
    def login():  # login就是一个类中的静态方法.静态方法没有默认参数,就当成普通的函数使用即可
        user = input('user :')
        if user == 'Tony':
            print('success')
        else:
            print('faild')

Student.login()

 

总结:

  • 当一个方法要使用对象的属性时就是用普通的方法;

  • 当一个方法要使用类中的静态属性时,就是用类方法(classmethod);

  • 当一个方法要既不使用对象的属性也不使用类中的静态属性时,就可以使用staticmethod静态方法;

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们