#coding:utf-8
from datetime import date,datetime
class User:
def __init__(self,name,birthday):
self.name = name
self.birthday = birthday
self._age = 0 #前面加一个下划线_是python类编程中的一种规范,不想让属性age对外暴露,
# 是想通过方法或者属性描述符的方式来访问
# 这样写代码只能通过调用实例的gat_age()方法获得age:user.get_age()
# def get_age(self):
# return datetime.now().year-self.birthday.year
#@property把一个getter方法变成属性,@score.setter把一个setter方法变成属性赋值
# 动态属性获取的方式加入自己的逻辑
#可以通过实例属性获得年龄:user.age
@property
def age(self):
return datetime.now().year - self.birthday.year
# 可以通过实例属性赋值,
@age.setter
def age(self,value):
self._age=value #在setter里,赋值的属性一定要是以一个下划线开始的,
# 这个属性可以在__init__函数中定义,也可以在property中定义返回值:return self._age
if __name__ == "__main__":
user = User("Tom",date(year=1973,month=12,day=23))
#print(user.get_age())
print(user.age)
user.age=20 #
print(user._age)
私有属性(property)
猜你喜欢
转载自blog.csdn.net/jiangsujiangjiang/article/details/85228662
今日推荐
周排行