码迷,mamicode.com
首页 > 其他好文 > 详细

@staticmethod和classmethod

时间:2018-09-28 22:07:36      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:str   color   函数   年-月   bsp   object   对象   int   @class   

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

@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()

 

@staticmethod和classmethod

标签:str   color   函数   年-月   bsp   object   对象   int   @class   

原文地址:https://www.cnblogs.com/yqpy/p/9720974.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!