Discuss / Python / 原来是通过这样的方式来限制不乱给一个实例添加属性或者更改属性值的

原来是通过这样的方式来限制不乱给一个实例添加属性或者更改属性值的

Topic source

class Screen(object): __slots__ = ("_width", "_height", "_resolution") @property def width(self): return self._width @property def height(self): return self._height @width.setter def set_width(self, width): if width>=1280 and width<360: raise ValueError("width between 360 and 1280") if not isinstance(width, int): raise ValueError("width should be int") self._width = width @height.setter def height(self, height): if height>=1280 and height<360: raise ValueError("width between 360 and 1280") if not isinstance(height, int): raise ValueError("width should be int") self._height = height @width.getter def width(self): return self._width @height.getter def height(self): return self._height @property def resolution(self): self._resolution = self.width * self._height return self._resolution

s = Screen() s.set_width = 80 s.height = 90 print(s.__slots__, s.height, s.width, s.resolution) s.resolution = 90 # 报错AttributeError: can't set attribute s.kiko = 99 # 报错AttributeError: 'Screen' object has no attribute 'kiko' 这样做就限制了只能有这三个属性,而且分辨率是只读的,不可修改。


  • 1

Reply