迭代器相对于生成器来说,需要自己手动实现__iter__和__next__方法 类的三个特征:封装 继承 多态 多态主要用于接口的重用 经典类和新式类: 在Python 2.x及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于“新式类”,不由任意内置类型派生出的类,则称之为“经典类” “新式类”和“经典类”的区分在Python 3.x之后就已经不存在,在Python 3.x之后的版本,因为所有的类都派生自内置类型object(即使没有显示的继承object类型),即所有的类都是“新式类” 区别:继承了python的内置类的时候,才是新式类,其他的都是经典类 1.经典类 通过type查看到的实例类型都叫做instance 类和实例之间能够通过__class__属性进行关联 新式类 通过type查看到的实例类型就是类名 class A:pass a=A() type(a): python2 中是经典类 我们通过type查看到的类名都是instance 只能通过__class__查看自己所属的类名 python3 中是新式类 我们通过type查看到的是类名A 也有__class__方法 2.多重继承顺序的区别 经典类:深度优先 新式类:c3算法 多重继承(那个圆陀陀的截图) 类可以多重继承 • 定义类A • 定义类B,C继承自A • 定义类D,继承自D • 定义类E,继承自E • 定义类F,继承自F 深度优先(从左至右)(经典类):如果有两三条类,先一条路走到底 截图 C3算法(从左至右)(不算广度优先)(新式类) 截图 #看截图定义 class a: def test(self): print("from a") class b(a): def test(self): print("from b") class c(a): def test(self): print("from c") class d(b): def test(self): print("from d") class e(c): def test(self): print("from e") class f(d,e):#先继承的d 再继承的e def test(self): print("from f") f1=f() f1.test() 查找顺序:经典类:FDBAEC 新式类:FDBECA 经典类与新式类的继承继承原理 • MRO:方法解析顺序 • 对于你定义的每一个类,Python会计算出一个方法解析顺序(MRO)列表,这个MRO列表就是一个简单的所有基类的线性顺序列表 现在新式类就是c3算法 经典类就是深度优先 c3算法: 首先将自身类加入到本序列,然后对继承序列的元素从左至右依次判断 若某元素不在其他序列或者它是所有继承序列的第一个,那么就把这个元素提取到本序列,不符合条件的就丢掉,然后下一个 静态方法和类方法: 属性:对象的描述信息 • 静态属性(所有的实例共用一份=>引用)--类属性 •