-- flyaflya [2005-08-04 09:20:24]
1. Proxy(代理)
1.1. 意图
为其他对象提供一种代理以控制对这个对象的访问。
1.2. 代码
1 class Proxy:
2 def __init__( self, subject ):
3 self.__subject = subject
4 def __getattr__( self, name ):
5 return getattr( self.__subject, name )
1.3. 例子
1
2 class RGB:
3 def __init__( self, red, green, blue ):
4 self.__red = red
5 self.__green = green
6 self.__blue = blue
7 def Red( self ):
8 return self.__red
9 def Green( self ):
10 return self.__green
11 def Blue( self ):
12 return self.__blue
使用Proxy改变Blue函数:
1 class NoBlueProxy( Proxy ):
2 def Blue( self ):
3 return 0
使用: >>> rgb = RGB( 100, 192, 240 )
>>> rgb.Red()
100
>>> proxy = Proxy( rgb )
>>> proxy.Green()
192
>>> noblue = NoBlueProxy( rgb )
>>> noblue.Green()
192
>>> noblue.Blue()
0
}}}使用: >>> rgb = RGB( 100, 192, 240 )
>>> rgb.Red()
100
>>> proxy = Proxy( rgb )
>>> proxy.Green()
192
>>> noblue = NoBlueProxy( rgb )
>>> noblue.Green()
192
>>> noblue.Blue()
0
1.4. 特殊说明
因为在Proxy中没有setattr函数,因此只可以得到rgb中的值,但不能改变,比如可以"r = noblue._RBGred",但不能写"noblue._RBGred = 255",如果要想改变RBG中的值,只有在RBG中定义一些函数如"setBlue...",在noblue中直接调用。
在Proxy中也不能定义setattr,否则在init中会发生死循环。