Python@classmethod,python classmethod和staticmethod

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: