1.property动态属性
python中当我们不想暴露一个变量时,常用的方法是这样的
from datetime import date, datetime
class Student:
def __init__(self, birthday):
self.birthday = birthday
self.__age =
def age(self):
return datetime.now().year - self.birthday.year
stu = Student(date(year=1990, month=10, day=25))
print(stu.age())
通过stu.age()
就可以获取年龄,在日常生活中,年龄就是这个人的属性,但是数据库中存储的数据是出生日期,那能不能让age向访问对象属性来进行访问呢?
from datetime import date, datetime
class Student:
def __init__(self, birthday):
self.birthday = birthday
+ @property
def age(self):
return datetime.now().year - self.birthday.year
stu = Student(date(year=1990, month=10, day=25))
print(stu.age)
通过property
装饰器就可以完成,如果要设置属性值,需要用到属性名.setter
装饰器
class Student:
def __init__(self):
self.__score = 0
@property
def score(self):
return self.__score
@score.setter
def score(self, value):
self.__score = value
stu = Student()
stu.score = 18
print(stu.score)
2.getattr和getattribute魔法函数
python中,类的属性没定义时,如果访问对象的属性就会抛错。