python类与对象详解(5):类属性的委托访问

2016-04-21  本文已影响1036人  KillerManA

今天我们来深入了解python中类属性的委托访问,这个相当于设计模式中的代理模式,代理模式就是使用这个委托访问生成的。不废话,先来一段简单的代码,来看一下最简单的委托形式:

class A:
    def f_one(self, x):
        pass

    def f_two(self):
        pass

class B(A):
    def __init__(self):
        self._a = A()
    
    def f_one(self, x):
        return self._a.f_one(x)

    def f_two(self):
        return self._a.f_two()

    def f_three(self):
        pass

这就是一个最简单的委托,将A的实例在B类中生成,并且转化为B的一个私有属性,当我们需要访问A的属性的时候,加入我们只暴露B出来,这时候就只能通过B类来访问A类,这就达到了委托的效果。

上面的这种方法使用情景为:有几个方法需要委托,当我们需要大量委托的时候这显然不是一个好办法,这时候还有另一个更巧妙的方法:getattr()方法,下面请看代码:

class A:
    def f_one(self, x):
        pass

    def f_two(self):
        pass

class B(A):
    def __init__(self):
        self._a = A()

    def f_three(self):
        pass

    def __getattr__(self, name):
        return getattr(self._a, name)

这里要注意一下这个新的方法,这个方法的作用是用来查找所有的属性,放在这里时,如果代码中尝试访问这个类中不存在的属性时,会去调用实例_a中的属性,这样就可以实现大量的代理。这里面还是比较绕,每次简单一点,慢慢体会。

上一篇 下一篇

猜你喜欢

热点阅读