Discuss / Python / 使用@property

使用@property

Topic source

七月上行

#1 Created at ... [Delete] [Delete and Lock User]

在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: 把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作

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): ... ValueError: score must between 0 ~ 100!

还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性:

class Screen(object): height = 0 @property def width(self): return self._width @width.setter def width(self, value): self._width = value @property def resolution(self): return self._width*self.height


  • 1

Reply