CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
jackfrued

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

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