美文网首页
组合优于继承之__getattr__

组合优于继承之__getattr__

作者: 徐本磊 | 来源:发表于2018-06-12 20:15 被阅读0次

    查找一个实例或类的属性失败时,会调用__getattr__方法查找相应的属性,如果类里面没有定义该方法的话,则会报AttributeError的错误。下面简单的写个示例来说明__getattr__在类组合时的应用。

#!/usr/bin/env python

class proxy(object):

    def test(self):

        print "foo in proxy"

    def resize(self, size):

        print "bar in proxy", size

class rbd(object):

    def __init__(self):

        self.proxy = proxy()

    def test(self):

        print "test in rbd"

        self.proxy.test()

    def __getattr__(self, attrib):

        return getattr(self.proxy, attrib)

if __name__=='__main__':

    a = rbd()

    a.test()

    a.resize(10)

可以看到,如果rbd想要改变proxy类里的某个方法,只需要定义一个同名的方法就可以了。如果想要继承proxy类里的方法,直接调用实现__getattr__方法就行了。这种组合比直接继承更加灵活。

相关文章

  • 组合优于继承之__getattr__

    查找一个实例或类的属性失败时,会调用__getattr__方法查找相应的属性,如果类里面没有定义该方法的话,则会报...

  • 组合优于继承

    《Effective Java 中文版第2版》书中第16条中说到: 继承是实现代码复用的有力手段,但它并非永远是完...

  • 组合和继承

    需要一个类的某个功能使用组合需要那个类的所有功能使用继承组合优于继承,接口优于实现

  • 学习笔记-为何说多用组合少用继承

    在面向对象的编程中,有一条非常经典的设计原则:组合优于继承,多用组合少用继承。什么不推荐使用继承?组合比继承有哪些...

  • 10 - 深入理解组合&继承

    在面向对象编程中,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承。为什么不推荐使用继承?组合相比...

  • 面向对象(七)组合优于继承?

    组合优于继承,多用组合少用继承。 1、为什么不推荐使用继承? 继承是面向对象的四大特性之一,用来表示类之间的 is...

  • 为什么组合优于继承?

    1.JavaBean如何设计 我们有一个User类,但是需要不同的角色,自然而然的我们想到了继承 这里有个问题,我...

  • 继承之组合继承

    组合原型链和借用构造函数 设计思想:1.使用原型链实现对原型属性和方法的继承:Man3.prototype = n...

  • 装饰者解耦的秘诀

    装饰者解耦的秘诀 组合优于继承原则是个很棒的想法,可以解决继承的地狱。然而,几乎没有库、示例代码或者教程来教你如何...

  • 装饰器模式

    装饰器模式 思想: 组合优于继承 JDK 的 IO 流就是使用包装模式对流进行各种增强如下代码, 用 Buffer...

网友评论

      本文标题:组合优于继承之__getattr__

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