在 Python 中,屬性值域是指在類中定義的屬性所能取到的值的范圍,它可以通過許多方式實(shí)現(xiàn),例如通過屬性裝飾器、屬性函數(shù)或?qū)傩远x來定義。屬性的值域不僅可以限定屬性的取值范圍,還可以在設(shè)值操作時(shí)觸發(fā)操作,從而實(shí)現(xiàn)更多的邏輯。
class Student: def __init__(self, name, score): self.__name = name self.__score = score @property def name(self): return self.__name @name.setter def name(self, value): if not isinstance(value, str): raise TypeError('name must be a string') self.__name = value @property def score(self): return self.__score @score.setter def score(self, value): if not isinstance(value, int): raise TypeError('score must be an integer') if not 0<= value<=100: raise ValueError('score must be between 0 and 100') self.__score = value stu = Student('Alice', 90) print(stu.name) # Alice stu.score = 85 print(stu.score) # 85 stu.name = 123 # 拋出 TypeError stu.score = 150 # 拋出 ValueError
在上面的代碼中,我們使用了 property 裝飾器來實(shí)現(xiàn) name 和 score 屬性的取值范圍限制,并在設(shè)值操作時(shí)拋出異常。由于 Python 中屬性的訪問控制是通過雙下劃線實(shí)現(xiàn)的,我們需要使用特殊的屬性訪問方式,例如 __name 和 __score。
在使用屬性時(shí),我們可以通過點(diǎn)號運(yùn)算符訪問屬性的值,例如 stu.name 或 stu.score,它們會自動調(diào)用對應(yīng)的 getter 方法返回屬性的值。同樣地,我們也可以通過賦值運(yùn)算符給屬性賦值,例如 stu.score = 85,它會自動調(diào)用對應(yīng)的 setter 方法更新屬性的值。
在實(shí)際使用中,我們可以根據(jù)具體的需求定義不同的屬性值域來實(shí)現(xiàn)更加靈活的屬性操作。例如,我們可以為屬性定義一個默認(rèn)值或者一個自動生成的值,或者在設(shè)值操作時(shí)觸發(fā)其他一些操作,比如更新其它屬性或者存儲數(shù)據(jù)到數(shù)據(jù)庫中。