在我們定義資料庫欄位類的時候,往往需要對其中的類屬性做一些限制,一般用get和set方法來寫,那在python中,我們該怎麼做能夠少寫**,又能優雅的實現想要的限制,減少錯誤的發生呢,這時候就需要我們的@property閃亮登場啦,巴拉巴拉能量……..
用**來舉例子更容易理解,比如乙個學生成績表定義成這樣
class student(object):
def get_score(swww.cppcns.comelf):
re self._score
def set_score(self, value):
if not isinstance(value, int):
raise valueerror('score must be an integer!')
if value < 0 or value > 100:
raise valueerror('score mus程式設計客棧t between 0 ~ 100!')
self._score = value
我們呼叫的時候需要這麼呼叫:
>>> s = student()
>>> s.set_score(60) # ok!
>>> s.get_score()
60>>> s.set_score(9999)
traceback (most recent call last):
...valueerror: score must between 0 ~ 100!
但是為了方便,節省時間,我們不想寫s.set_score(9999)啊,直接寫s.score = 9999不是更快麼,加了程式設計客棧方法做限制不能讓呼叫的時候變麻煩啊,@property快來幫忙….
class student(object):
@property
def score(self):
return self._score
@score.setter #@score.setter是前乙個@property裝飾後的副產品。
def score(self,value):
if not isinstance(value, int):
raise valueerror('分數必須是整數才行吶')
if value < 0 or value > 100:
raise valueerror('分數必須0-100之間')
self._score = value
看上面**可知,把get方法變為屬性只需要加上@property裝飾器即可,此時@property本身又會建立另外乙個裝飾器@score.setter,負責把set方法變成給屬性賦值,這麼做完後,我們呼叫起來既可控又方便
>>> s = student()
>>> s.score = 60 # ok,實際轉化為s.set_score(60)
>>> s.score # ok,實際轉化為s.get_score()
60>>> s.score = 9999
traceback (most recent call last):
...valueerr程式設計客棧or: score must between 0 ~ 100!
本文標題: python @property原理解析和用法例項
本文位址:
python property 私有屬性
加有 變數名 的私有屬性直接訪問不了,用get.和set.方法,提供個介面進行訪問。property的使用 私有屬性,用來簡化訪問私有屬性,提供開放性介面,共外界訪問 class student def init self,name,age self.name name self.age age d...
python property動態屬性方法記錄。
student.get age 如下。from datetime import date,datetime class students def init self,name,birthday self.name name self.birthday birthday defget age self...
Python property裝飾器詳解
屬性的分類 1 例項屬性 最好在 init self,中初始化 內部呼叫時都需要加上self.外部呼叫時用instancename.propertyname 2 類屬性 在 init 外初始化 在內部用classname.類屬性名呼叫 外部既可以用classname.類屬性名又可以用instance...