11class 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