Python3 高級核心技術97講之動態屬性

from datetime import date,datetime

class User:

def __init__(self,name,birthday):

self.name=name

self.birthday=birthday

self.age=0

def get_age(self):

return datetime.now().year-self.birthday.year

if __name__=="__main__":

user = User('cgy', date(year=1987, month=1, day=1))

user.age

應用案例:

我們之前在設計的時候用了一個age=0這個字段,但是在後期的時候我們在數據庫內將這個字段刪除了,因為這個字段不適合存於數據庫內,這個字段每年都會變動。

我們就把代碼中那條self.age=0給註釋掉了,但是我們在很多地方都用的user.age,我們如何讓user.age這個屬性依然能用呢?

這裡我們就得用到property了,加上@property這個屬性描述符,我們的方法就能像屬性一樣調用了所以叫屬性描述符!

快在你自己電腦上敲一下試試吧

from datetime import date,datetime

class User:

def __init__(self,name,birthday):

self.name=name

self.birthday=birthday

# self.age=0

# def get_age(self):

# return datetime.now().year-self.birthday.year

@property

def age(self):

return datetime.now().year-self.birthday.year

if __name__=="__main__":

user = User('cgy', date(year=1987, month=1, day=1))

user.age

這裡只有get,我們如何set我們的age呢?

from datetime import date,datetime

class User:

def __init__(self,name,birthday):

self.name=name

self.birthday=birthday

# self.age=0

# def get_age(self):

# return datetime.now().year-self.birthday.year

@property

def age(self):

return datetime.now().year-self.birthday.year

@age.setter

def age(self,value):

self._age=value

if __name__=="__main__":

user = User('cgy', date(year=1987, month=1, day=1))

user._age=38

print(user.age)

print(user._age)

輸出:

33

38


分享到:


相關文章: