zoukankan      html  css  js  c++  java
  • @staticmethod和classmethod

    之前一直搞不清楚这两个类方法有什么区别,今天着重学习了一下

    @staticmethod是静态方法,不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。

    class C(object):
        @staticmethod
        def f():
            print('runoob');
     
    C.f();          # 静态方法无需实例化
    cobj = C()
    cobj.f()        # 也可以实例化后调用

    classmethod是类方法,对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。

    class A(object):
        bar = 1
        def func1(self):  
            print ('foo') 
        @classmethod
        def func2(cls):
            print ('func2')
            print (cls.bar)
            cls().func1()   # 调用 foo 方法
     
    A.func2()               # 不需要实例化

    再举一个例子,如果一个类定义了日期,需要输出年月日,然而有时候输入的格式是“年-月-日”的形式,又需要先把这种格式转化为年月日,再输出,这时候就需要一个方法去改变类的输入值,而不是去改变init初始化函数,这个方法就是类方法或静态方法,详见如下

    class Data_test2(object):
        day=0
        month=0
        year=0
        def __init__(self,year=0,month=0,day=0):
            self.day=day
            self.month=month
            self.year=year
    
        @staticmethod ###静态方法
        def get_date(data_as_string):
            year,month,day=map(int,data_as_string.split('-'))
            date1=Data_test2(year,month,day)
            #返回的是一个初始化后的类
            return date1
    
        def out_date(self):
            print("year :")
            print(self.year)
            print("month :")
            print(self.month)
            print("day :")
            print(self.day)
    r=Data_test2.get_date("2016-8-6")
    r.out_date()
    class Data_test2(object):
        day=0
        month=0
        year=0
        def __init__(self,year=0,month=0,day=0):
            self.day=day
            self.month=month
            self.year=year
    
        @classmethod  ###类方法
        def get_date(cla, data_as_string):
            #这里第一个参数是cls, 表示调用当前的类名
            year,month,day=map(int,data_as_string.split('-'))
            date1=cls(year,month,day)
            #返回的是一个初始化后的类
            return date1
    
        def out_date(self):
            print("year :")
            print(self.year)
            print("month :")
            print(self.month)
            print("day :")
            print(self.day)
    r=Data_test2.get_date("2016-8-6")
    r.out_date()
    人生苦短,何不用python
  • 相关阅读:
    03JavaScript程序设计修炼之道 2019-06-23_14-32-17
    03JavaScript程序设计修炼之道 2019-06-20_21-30-17
    03JavaScript程序设计修炼之道 2019-06-20_21-12-16
    03JavaScript程序设计修炼之道 2019-06-20_20-51-20
    03JavaScript程序设计修炼之道-2019-06-20_20-31-49
    03JavaScript程序设计修炼之道-2019-06-20_20-07-53
    02-CSS基础与进阶-day15
    02-CSS基础与进阶-day14
    02-CSS基础与进阶-day13_2018-09-21-21-13-20
    python基础(6)集合
  • 原文地址:https://www.cnblogs.com/yqpy/p/9720974.html
Copyright © 2011-2022 走看看