python多重继承的属性和方法调用顺序问题和对迭代器的初步理解

推荐阅读:https://www.cnblogs.com/bigb/p/11650707.html

计算机学习的一个好办法就是自己将代码跑一遍,了解代码的运作顺序和原理(主要弄懂 函数作用,传入参数,返回值)

见代码:

 

class A(object):
    def __init__(self):
        print('A')
        super(A, self).__init__()


class B(object):
    def __init__(self):
        print('B')
        super(B, self).__init__()


class C(A):
    def __init__(self):
        print('C')
        super(C, self).__init__()


class D(A):
    def __init__(self):
        print('D')
        super(D, self).__init__()


class E(B, C):
    def __init__(self):
        print('E')
        super(E, self).__init__()


class F(C, B, D):
    def __init__(self):
        print('F')
        super(F, self).__init__()


class G(D, B):
    def __init__(self):
        print('G')
        super(G, self).__init__()


if __name__ == '__main__':
    f = F()

F
C
B
D
A

重点关注class F,在实现这个类的时候,采用了堆栈的原理。

先执行了print(“F”),随后按照C,B,D的顺序执行完一个就压入栈。所以此时的输出顺序为C,B,D,这时候再按照D,B,A的顺序(出栈)执行supre函数所继承的父类中的函数和方法。

 

注:说起来比较抽象,函数还是要自己跑一遍。推荐单步执行的方式明白每一行代码和每一个函数都是都是怎么工作的。(作用,参数,返回值的角度)

补充:

     supre函数的常用格式   supre(当前类名,self).父类中的方法或属性

 迭代器:

 

 

   推荐阅读:https://www.cnblogs.com/Yanjy-OnlyOne/p/10147052.html

   推荐代码:

    

def odd():

    print('step 1')
    yield 1
    print('step 2')
    yield(3)
    print('step 3')
    yield(5)      #yield会返回一个迭代器,不过值会储存在迭代器内,通过迭代可以取出来,而且for循环的实质是由上次断掉的地方重新继续运行

o=odd()         #调用函数只是会返回一个生成器  (推荐此行加断点)

for i in o:     #for循环本质是不断调用next方法,而只是在调用的时候才会去执行函数,随用随取。(将本段代码设置断点跑一跑就知道了)
    print(type(i))#迭代器只是一个容器,用来储存值的
    print(i)

 

 

注:推荐自己跑一遍代码

迭代器也可以理解为一种对子函数的“冻结”,保存当前子函数中的所有值。下一次调用时由yield之后接着运行

 

posted @ 2020-02-08 16:52  徐阶  阅读(215)  评论(0编辑  收藏  举报