Skip to content
This repository was archived by the owner on Sep 20, 2018. It is now read-only.

Commit 73af270

Browse files
committed
添加了 observer.py 解释注释
1 parent a38098a commit 73af270

1 file changed

Lines changed: 35 additions & 34 deletions

File tree

cp13-Observer/observer.py

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,59 @@
11
class Publisher:
22

33
def __init__(self):
4-
self.observers = []
4+
self.observers = [] # 观察者列表
55

6-
def add(self, observer):
7-
if observer not in self.observers:
8-
self.observers.append(observer)
9-
else:
10-
print('Failed to add: {}'.format(observer))
11-
12-
def remove(self, observer):
13-
try:
14-
self.observers.remove(observer)
15-
except ValueError:
16-
print('Failed to remove: {}'.format(observer))
6+
def add(self, observer): # 添加观察者
7+
if observer not in self.observers: # 如果观察者不在列表中
8+
self.observers.append(observer) # 向列表中添加观察者
9+
else: # 否则,观察者已经在列表中,已经在观察,为避免多次 notify
10+
print('Failed to add: {}'.format(observer)) # 添加失败提示
1711

18-
def notify(self):
19-
[o.notify(self) for o in self.observers]
12+
def remove(self, observer): # 移除观察者
13+
try: # 尝试
14+
self.observers.remove(observer) # 从列表移除观察者
15+
except ValueError: # 如果观察者不在列表中,引发值异常
16+
print('Failed to remove: {}'.format(observer)) # 移除失败提示
2017

18+
def notify(self): # 通知所有观察者,状态已经改变
19+
# 通知列表中的每一个观察值,状态已经改变
20+
[o.notify(self) for o in self.observers]
21+
2122

22-
class DefaultFormatter(Publisher):
23+
class DefaultFormatter(Publisher): # 默认的被观察者,发布者,主持者
2324

2425
def __init__(self, name):
25-
Publisher.__init__(self)
26+
Publisher.__init__(self) # 调用发布者的初始化函数
2627
self.name = name
27-
self._data = 0
28+
self._data = 0 # _ 表示该属性不得被访问,私有
2829

2930
def __str__(self):
3031
return "{}: '{}' has data = {}".format(type(self).__name__, self.name, self._data)
3132

32-
@property
33+
@property # 将方法装饰成属性
3334
def data(self):
3435
return self._data
3536

36-
@data.setter
37-
def data(self, new_value):
38-
try:
39-
self._data = int(new_value)
40-
except ValueError as e:
41-
print('Error: {}'.format(e))
37+
@data.setter # 向被 property 装饰成的属性赋值时调用函数
38+
def data(self, new_value): # self.data = x 等价于 self.data(x)?
39+
try: # 尝试
40+
self._data = int(new_value) # 将值转化为int并传递给 self._data
41+
except ValueError as e: # 转化失败产生异常
42+
print('Error: {}'.format(e)) # 输出
4243
else:
43-
self.notify()
44+
self.notify() # 通知所有注册的观察者
4445

4546

46-
class HexFormatter:
47+
class HexFormatter: # 十六进制的观察者
4748

48-
def notify(self, publisher):
49+
def notify(self, publisher): # 被通知时的行为
4950
print("{}: '{}' has now hex data = {}".format(type(self).__name__,
5051
publisher.name, hex(publisher.data)))
5152

5253

53-
class BinaryFormatter:
54+
class BinaryFormatter: # 二进制的观察者
5455

55-
def notify(self, publisher):
56+
def notify(self, publisher): # 被通知时的行为
5657
print("{}: '{}' has now bin data = {}".format(type(self).__name__,
5758
publisher.name, bin(publisher.data)))
5859

@@ -63,24 +64,24 @@ def main():
6364

6465
print()
6566
hf = HexFormatter()
66-
df.add(hf)
67+
df.add(hf) # 添加观察者
6768
df.data = 3
6869
print(df)
6970

7071
print()
7172
bf = BinaryFormatter()
72-
df.add(bf)
73+
df.add(bf) # 添加观察者
7374
df.data = 21
7475
print(df)
7576

7677
print()
77-
df.remove(hf)
78+
df.remove(hf) # 移除观察者
7879
df.data = 40
7980
print(df)
8081

8182
print()
82-
df.remove(hf)
83-
df.add(bf)
83+
df.remove(hf) # 移除观察者
84+
df.add(bf) # 添加观察者
8485
df.data = 'hello'
8586
print(df)
8687

0 commit comments

Comments
 (0)