当前位置 博文首页 > 文章内容

    python之类方法和静态方法

    作者: 栏目:未分类 时间:2020-08-25 11:02:32

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    在类中定义的函数称为方法,主要有三种:实例方法、类方法、静态方法。

    class MyTest():
    
        # 普通实例函数
        def func1(self, arg1, arg2):
            pass
    
        # 类函数
        @classmethod
        def func2(cls, arg1, agr2):
            pass
    
        # 静态函数
        @staticmethod
        def func3(arg1, agr2):
            pass

     

    三种函数的区别:

     实例方法(instancemethod类方法(classmethod)静态方法(staticmethod)
    定义方式 self作为第一个参数 cls作为第一个参数 无强制参数
    参数绑定的对象 类的实例,即用self来传递当前类的实例 类对象,即用cls传递当前类对象
    调用方式 只能通过类的实例调用 类对象或类的实例均可调用 类对象或类的实例均可调用
    访问类/实例成员   可访问类成员,不可访问实例成员 均不可访问类成员和实例成员

     

    由于classmethod和staticmethod方法可以直接使用类对象调用,因此可在类实例化之前,通过classmethod或staticmethod方法,对类做一定的交互,提供额外的构造实例

     

    class Date():
        '''类成员'''
        day = 0
        month = 0
        year = 0
    
        def __init__(self, year=0, month=0, day=0,):
            '''实例成员'''
            self.year = year
            self.month = month
            self.day = day
    
        # 类函数
        # (PS:由于cls表示类对象,而不是类实例。因此如果我们继承Date类,那么所有的子类也都将拥有trans_date1这个方法。)
        @classmethod
        def trans_date1(cls, date_of_string):
            # print(cls.year)   true, @classmethod可访问类成员,无法访问实例成员
            year, month, day = map(int, date_of_string.split('-'))
            return cls(year, month, day)    # 返回类的实例
    
        # 静态函数
        @staticmethod
        def trans_date2(string_data):
            # print(year)      false, @staticmethod均不可访问类成员和实例成员
            year, month, day = map(int, string_data.split('-'))
            return Date(year, month, day)   # 返回类的实例
    
        def out_date(self):
            print("year: ", self.year)
            print("month: ", self.month)
            print("day: ", self.day)
    
    if __name__ == "__main__":
        # date = Date(2020, 8, 25)
        '''不需实例化类,直接通过 类名.函数 名调用类方法'''
        date1 = Date.trans_date1("2020-08-25")
        date1.out_date()
        '''不需实例化类,直接通过 类名.函数 名调用静态方法'''
        date2 = Date.trans_date2("2020-08-25")
        date2.out_date()


    运行结果:
    year:  2020
    month:  8
    day:  25
    year:  2020
    month:  8
    day:  25

     

     

    参考:https://www.cnblogs.com/agnewee/p/5653936.html