Python@classmethod,python classmethod和staticmethod
说到调用类,我们绕不开参数的讨论。我们已经在以前的文章中讨论了参数静态方法的一些用法。那么,同样为我们所熟悉的类方法之间,参数的使用有什么区别呢?这里先在代码中调用classmethod,运行的过程中一定要知道需要哪些参数。别的不多说,下面是调用classmethod的代码。让我们寻找参数。
classData_test2(对象):
日=0
月份=0
年份=0
def__init__(self,年=0,月=0,日=0):
self.day=日
self.month=月
self.year=年
@classmethod
defget_date(cls,string_date):
#这里的第一个参数是cls,意思是调用当前的类名。
年、月、日=map(int,string_date.split(-))
date1=cls(年、月、日)
#返回的是一个初始化的类
返回日期1
defout_date(self):
打印“:年”
printself.year
打印“month:”
打印自己.月
打印“第:天”
Printself.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,也可以进行一个参数选择的简单对比,有兴趣的小伙伴可以查看下。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。