1. 程式人生 > 其它 >裝飾器@property

裝飾器@property

"""
# 裝飾器@property:被裝飾的方法,可以將其當做屬性來用。

# 定義了一個Exam類,為了避免直接對_score屬性操作,提供了get_score和set_score方法,這樣起到了封裝的作用,
# 把一些不想對外公開的屬性隱蔽起來,而只是提供方法給使用者操作,在方法裡面,可以檢查引數的合理性等。
class Exam(object):
def __init__(self, score):
self._score = score

def get_score(self):
return self._score

def set_score(self, val):
if val < 0:
self._score = 0
elif val > 100:
self._score = 100
else:
self._score = val

e = Exam(60)
print(e.get_score())

e.set_score(70)
print(e.get_score())
"""

"""
# 給方法score加上了@property,於是可以把score當成一個屬相來用
# @score.setter的作用:它可以把被裝飾的方法變成屬性來賦值
class Exam(object):
def __init__(self, score):
self._score = score

@property
def score(self):
return self._score

@score.setter
def score(self, val):
if val < 0:
self._score = 0
elif val > 100:
self._score = 100
else:
self._score = val

e = Exam(60)
print(e.score)

e.score = 90
print(e.score)

e.score = 200
print(e.score)
"""

"""
# 不使用score.setter這個裝飾器,這時score就變成一個只讀屬性(是隻讀屬性,不能設定值)
class Exam(object):
def __init__(self, score):
self._score = score

@property
def score(self):
return self._score

e = Exam(60)
print(e.score)
e.score = 200
print(e.score)
"""

"""
# 一旦給函式加上一個裝飾器@property,呼叫函式的時候就不要加括號直接呼叫函數了
class Student(object):

def __init__(self, name, score):
self.name = name
self.__score = score

@property
def score(self):
print("Name:{};Score:{}".format(self.name, self.__score))

stu = Student("John", 100)
stu.score # Name:John;Score:100
"""