classmethod如何在python中选择参数?

美女程序员鼓励师

说起类的调用,就绕不开对于参数的讨论,我们在之前文章中已经讨论过了静态方法对于参数的一些使用。那么,同样是我们所熟知的类方法,对于参数的使用上又有着怎样的区别呢?这里我们先在代码中调用classmethod,在运行的过程中想必就知道需要用到什么参数了。其他的不多说,下面是调用classmethod代码,大家找找参数吧。

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(cls, string_date):

        #这里第一个参数是cls, 表示调用当前的类名

        year,month,day=map(int,string_date.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

在Date_test类里面创建一个成员函数, 前面用了@classmethod装饰。 它的作用就是有点像静态类,比静态类不一样的就是它可以传进来一个当前类作为第一个参数。那么如何调用呢?

r=Data_test2.get_date("2016-8-1")

r.out_date()

输出:

year :

2016

month :

8

day :

1

这样子等于先调用get_date()对字符串进行处理,然后才使用Data_test的构造函数初始化。


补充classmethod与staticmethod:

这两者的区别在于,classmethod增加了一个对实际调用类的引用,这带来了很多方便的地方:

  • 方法可以判断出自己是通过基类被调用,还是通过某个子类被调用

  • 通过子类调用时,方法可以返回子类的实例而非基类的实例

  • 通过子类调用时,方法可以调用子类的其他classmethod

一般来说classmethod可以完全替代staticmethod。staticmethod唯一的好处是调用时它返回的是一个真正的函数,而且每次调用时返回同一个实例(classmethod则会对基类和子类返回不同的bound method实例),但这点几乎从来没有什么时候是有用的。不过,staticmethod可以在子类上被重写为classmethod,反之亦然,因此也没有必要提前将staticmethod全部改为classmethod,按需要使用即可。


以上就是classmethod在python中选择参数的一些分析,同时结合我们之前所学的staticmethod,也可以进行一个参数选择的简单对比,有兴趣的小伙伴可以查看下。


以上是 classmethod如何在python中选择参数? 的全部内容, 来源链接: utcz.com/z/541730.html

回到顶部