装饰器@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
"""

 

posted @ 2021-09-22 14:19  每天数据学习一点点  阅读(83)  评论(0)    收藏  举报