• python之类方法和静态方法


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

    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

  • 相关阅读:
    HRBUST 1377 金明的预算方案
    51Nod 2649 完全背包
    计蒜客 T2129 采药
    计蒜客 T1408 矩形嵌套
    OpenJudge 2711 合唱队形
    51Nod 2080 最长上升子序列
    2021NUAA暑假集训 Day5 部分题解
    2021NUAA暑假集训 Day4 部分题解
    C++ 11 move constructor 何时调用?
    老外这样说英文
  • 原文地址:https://www.cnblogs.com/Maruying/p/13558427.html
Copyright © 2020-2023  润新知