组合优于继承之__getattr__

    查找一个实例或类的属性失败时,会调用__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__)