私有属性(property)

#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)

猜你喜欢

转载自blog.csdn.net/jiangsujiangjiang/article/details/85228662