代码笔记片段
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")