美文网首页
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