python的经典类和新式类
2018年11月11日 - 由Bo 0 评论 1275 阅读
python里的class存在着经典类和新式类的区别。class() 为经典类,class(object) 为新式类。普通的使用差别也不大,但对类的使用多一点,则会有些注意事项。
1. 在class里继承于object的方式是python2系列中的,因为在python3中默认会加载object,所有的类都是新式类。但在维护更改遗留的python2项目时,需要注意两者区别。
2. 多重继承时,对于父类中的方法则有个遍历方式的不同。经典类是深度优先,新式类是广度优先(有的也有说是c3算法,在有些结果下和广度优先的结果一样)。
比如class D继承与B和C,B和C是A的子类,C有重写A中的方法。用经典类时,则会从D-B-A,找到A中的方法,而使用不到C中重写的方法。如果是新式类,则会是D-B-C-A的顺序,会调用到C中的方法。
3. 在经典类中,所有的类都是classobj类型,类的实例是instance类型。类与实例只有通过__class__属性进行关联。这样在判断实例类型时,就会造成不便:所有的实例都是instance类型,会出现两个不一样的类比较结果为真的情况。
经典类的实例是instance类型,而内置类的实例却不是,无法统一。也会造成麻烦。
4. 在python2中如果不指定object时,则没有__class__的方法可以使用。
因此在使用python2时,最好是加上object,使用python3则可以忽略。
上一篇:
看西航动力研究所张小平事件有感