car1.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. """
  2. 属性的使用
  3. - 访问器/修改器/删除器
  4. - 使用__slots__对属性加以限制
  5. Version: 0.1
  6. Author: 骆昊
  7. Date: 2018-03-12
  8. """
  9. class Car(object):
  10. __slots__ = ('_brand', '_max_speed')
  11. def __init__(self, brand, max_speed):
  12. self._brand = brand
  13. self._max_speed = max_speed
  14. @property
  15. def brand(self):
  16. return self._brand
  17. @brand.setter
  18. def brand(self, brand):
  19. self._brand = brand
  20. @brand.deleter
  21. def brand(self):
  22. del self._brand
  23. @property
  24. def max_speed(self):
  25. return self._max_speed
  26. @max_speed.setter
  27. def max_speed(self, max_speed):
  28. if max_speed < 0:
  29. raise ValueError('Invalid max speed for car')
  30. self._max_speed = max_speed
  31. def __str__(self):
  32. return 'Car: [品牌=%s, 最高时速=%d]' % (self._brand, self._max_speed)
  33. car = Car('QQ', 120)
  34. print(car)
  35. # ValueError
  36. # car.max_speed = -100
  37. car.max_speed = 320
  38. car.brand = "Benz"
  39. # 使用__slots__属性限制后下面的代码将产生异常
  40. # car.current_speed = 80
  41. print(car)
  42. # 如果提供了删除器可以执行下面的代码
  43. # del car.brand
  44. # 属性的实现
  45. print(Car.brand)
  46. print(Car.brand.fget)
  47. print(Car.brand.fset)
  48. print(Car.brand.fdel)
  49. # 通过上面的代码帮助学生理解之前提到的包装器的概念
  50. # Python中有很多类似的语法糖后面还会出现这样的东西