美文网首页
python类与对象详解(5):类属性的委托访问

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

作者: KillerManA | 来源:发表于2016-04-21 23:23 被阅读1036次

今天我们来深入了解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中的属性,这样就可以实现大量的代理。这里面还是比较绕,每次简单一点,慢慢体会。

相关文章

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

    今天我们来深入了解python中类属性的委托访问,这个相当于设计模式中的代理模式,代理模式就是使用这个委托访问生成...

  • python 类

    类 用来描述具有相同的属性和方法的对象的集合。python中的类就是对象。 python 中的元类详解 创建Dog...

  • 教程收集:Kotlin学历

    作者:Pape 初识基础控制流类与对象抽象类与接口可见性修饰符特殊类扩展与委托委托属性空安全函数与Lambda表达...

  • 面向对象的编程思想和Python的继承和多态,特殊方法,引用计数

    面向对象的编程思想和Python的类,访问和属性,继承在上一文中我们了解到了,私有的属性的访问方式:实例名._类名...

  • 23.Python之面向对象(类与对象)

    Python之类与对象 类类:用来描述具有相同的属性和方法的对象的集合(在Python中类与类型是一个概念)。特点...

  • python自定义功能之面向对象

    本章主要内容 类与对象 定义和使用类 类的属性和方法 类的继承 类的方法重载 总结: python中的类与对象与J...

  • java动态代理

    何为代理 为其他对象提供一种代理以控制对这个对象的访问。 动态生成代理类,反射获取类。 代理类与委托类有同样的接口...

  • Kotlin-属性委托深入详解

    Kotlin-属性委托深入详解 学习一下属性的委托(delegated property),我们知道定义一个类的属...

  • 动态代理与静态代理区别

    代理:为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对...

  • 设计模式-行为模式-访问者模式

    访问者模式用于访问对象的属性对象。可以在不改变属性对象类的前提下改变对属性对象的操作。 以下代码定义了访问者抽象类...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/skatrttx.html