美文网首页
Python类方法+静态方法+动态属性方法

Python类方法+静态方法+动态属性方法

作者: 拖延症旳理想主义者 | 来源:发表于2020-01-07 22:54 被阅读0次

    代码笔记片段

    
    import re
    from datetime import date, datetime
    
    __author__ = "Mr-Li"
    __date__ = "2020/1/7 10:23 下午"
    
    
    class User(object):
    
        def __init__(self, name, birthday):
            self.name = name
            self.birthday = birthday
            self._age = 0
    
        @staticmethod
        def check_date_flt(flt):
            """ 3、通过静态方法,来判断传入的birthday格式是否正确 """
            r = r"[0-9]{4}-[0-9]{2}-[0-9]{2}"
            match = re.match(re.compile(r), flt)
            if match is not None:
                return flt
            else:
                raise ValueError
    
        @classmethod
        def check_date_flt_cls(cls, flt):
            """ 4、类方法跟静态方法一致,都是通过类直接调用,但是类方法里面可以访问类属性和静态方法 """
            return cls.check_date_flt(flt)
    
        @property
        def age(self):
            """ 1、动态属性方法 """
            if self._age == 0:
                return date.today().year - datetime.strptime(self.birthday, "%Y-%m-%d").year
            else:
                # 出现异常或者设置了值,则返回_age的值
                return self._age
    
        @age.setter
        def age(self, value):
            """ 2、动态属性不仅有get,还可以set值 """
            self._age = value
    
        @age.deleter
        def age(self):
            # del 属性时,调用
            self._age = 0
    
    
    if __name__ == '__main__':
        user = User("lzh", User.check_date_flt_cls("1994-101-23"))
        # 通过调用属性的形式,调用对象的方法
        print(user.age)
        user.age = 34
        print(user.age)
    
        del user.age
        print(user.age)
    
        User.check_date_flt("1994-10-23")
    
    

    相关文章

      网友评论

          本文标题:Python类方法+静态方法+动态属性方法

          本文链接:https://www.haomeiwen.com/subject/petjactx.html