最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python3类中的装饰方法如何选择?

    正文概述    2020-05-04   212

    python中的方法不怕多,就怕难于选择。因为如果概念不清楚的话,光从表面上看难以分出伯仲,所以学习相关的基本概念已经刻不容缓了。装饰方法这一块,大家都有一些了解,小编本篇会着重于两种方法的对比上,基础概念的介绍不会很多。小伙伴们学习的时候可以用心对比出两者的不同。


    @classmethod 用来修饰方法。使用在实例化前与类进行交互,但不和其实例进行交互的函数方法上。

     @staticmethod 用来修饰类的静态方法。使用在有些与类相关函数,但不使用该类或该类的实例。如更改环境变量、修改其他类的属性等。

     两者最明显的区别,classmethod 必须使用类的对象作为第一个参数,而staticmethod则可以不传递任何参数

     

    1、@classmethod 类方法

    类方法,我们不用通过实例化类就能访问的方法。而且@classmethod 装饰的方法不能使用实例属性,只能是类属性。它主要使用在和类进行交互,但不和其实例进行交互的函数方法上。

    下面,我们要写一个只在类中运行而不在实例中运行的方法。

    简单示例,读取私有化类属性数据,如下:

    class Circle(object):
       __pi = 3.14
     
       def __init__(self, r):
           self.r = r
     
       @classmethod
       def pi(cls):
           return cls.__pi
     
       def area(self):
           """
    圆的面积
           """
           return self.r ** 2 * self.__pi
     
    print(Circle.pi())  # 没有实例化 能直接访问pi() 方法
    circle1 = Circle(2)
    print(circle1.pi()) # 也可以通过实例访问pi()方法


    2、@staticmethod 静态方法

     @staticmethod 和@classmethod非常的相似,但是@staticmethod 不强制要求传递参数(它做的事与类方法或实例方法一样)。

     @staticmethod使用在有些和类相关函数,但不使用该类或者该类的实例。如更改环境变量、修改其他类的属性等。

    一句话@staticmethod 修饰的方法是放在类外的函数,我们为了方便将他移动到了类里面,它对类的运行无影响。

    示例:

    class Date(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 from_string(cls, date_as_string):
           year, month, day = date_as_string.split('-')
           date = cls(year, month, day)
           return date
     
       @staticmethod
       def is_date_valid(date_as_string):
           """
          用来校验日期的格式是否正确
           """
           year, month, day = date_as_string.split('-')
           return int(year) <= 3999 and int(month) <= 12 and int(day) <= 31
     
    date1 = Date.from_string('2012-05-10')
    print(date1.year, date1.month, date1.day)
    is_date = Date.is_date_valid('2012-09-18') # 格式正确 返回True


    两种装饰方法的比较已经写得很全面了,不同的地方相信大家都能找出来并牢记。其他更多的相关拓展,会在以后的文章里面涉及,小伙伴们阅读的时候可以多加留意。


    起源地下载网 » python3类中的装饰方法如何选择?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元