美文网首页
面向对象高级编程(二)-多重继承&定制类

面向对象高级编程(二)-多重继承&定制类

作者: 皮卡丘的电光一闪 | 来源:发表于2020-06-12 14:17 被阅读0次
    多重继承

    继承是面向对象编程的一个重要方式,通过继承,子类可以扩展父类的功能。

    在python中,可以通过多重继承,一个子类同时获得多个父类的所有功能:

    # 动物大类
    class Animal(object):
        pass
    # 地走类
    class Runnable(object):
        pass
    # 飞行类
    class Flyable(object):
        pass
    # Dog和Bat多重继承
    class Dog(Animal, Runnable):
        pass
    class Bat(Animal, Flyable):
        pass
    
    MixIn

    在设计类的继承关系时,主线都是单一继承下来的。但若"混入"额外的功能,通过多重继承实现,这种设计通常称之为MinIn。

    为了更好的看出继承关系,将RunnableFlyable改为RunnableMinInFlyableMinIn

    class Dog(Animal, RunnableMinIn):
        pass
    

    MinIn的目的就是给一个类增加多个功能,优先考虑通过多重继承来组合多个MinIn功能,而不是设计多层次的复杂的继承关系。

    定制类
    class Student(object):
        def __init(self, name):
            self.__name = name
    # 1. __str__,自定义打印实例显示的值
        def __str__(self):
            return 'Studen object (name: %s)' % self.__name
    # 2. __iter__ 可将一个类被用于for...in循环,__iter__返回一个迭代对象,__next__方法拿到循环的下一个值,知道遇到StopIteration错误时退出循环。
        def __iter__(self):
            return self    # 实例本身就是迭代对象,返回自己即可
        def __next__(self):
            return self
    # 3.__getitem__像list那样按照下表取出元素(切片等函数体见廖雪峰老师的定制类__getitem__)
        def __getitem__(self, n):
            a, b = 1, 1
            for x in range(n):
                a, b = b, a + b
            return a
    # 4.__getattr__动态返回一个属性
        def __getattr__(self, attr):
            if attr == 'score'
                return 99
    # 5.__call__一个对象实例可以有自己的属性和方法,当我们调用实例方法时,我们用instance.method()来调用。定义一个__call__方法,就可以i直接对实例进行调用
        def __call__(self):
            print('My name is %s.' % self.__name)
    # 通过callable()函数,可以判断一个对象是否是'可调用'对象
    

    相关文章

      网友评论

          本文标题:面向对象高级编程(二)-多重继承&定制类

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