加入想将某个实例的属性访问代理到内部另一个实例中去,目的可能是作为继承的一个替代方法或者实现代理模式,简单来说,代理是一种编程模式,它将某个操作转移给另外一个对象来实现。
class A(object):
def spam(self, x):
print(x)
pass
def foo(self):
pass
class B(object):
"""使用__getattr__的代理,代理方法比较多时候"""
def __init__(self):
self._a = A()
def bar(self):
pass
# Expose all of the methods defined on class A
def __getattr__(self, name):
"""这个方法在访问的attribute不存在的时候被调用
the __getattr__() method is actually a fallback method
that only gets called when an attribute is not found"""
return getattr(self._a, name)
if __name__ == "__main__":
b = B()
b.bar()
b.spam(100)
b.foo()
- 实现代理模式
class Proxy(object):
def __init__(self, obj):
self._obj = obj
def __getattr__(self, name):