码迷,mamicode.com
首页 > 编程语言 > 详细

Python中新式类 经典类的区别(即类是否继承object)

时间:2017-04-30 15:18:04      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:sel   http   子类   python   self   rom   color   多继承   bug   

首先什么是新式类 经典类呢:

#新式类是指继承object的类
class A(obect):
      ...........
#经典类是指没有继承object的类
class A:
     ...........

Python中推荐大家使用新式类 1.新的肯定好哈,已经兼容经典类 

              2.修复了经典类中多继承出现的bug

下面我们着重说一下多继承的bug 如图:

技术分享

BC 为A的子类, D为BC的子类 ,A中有save方法,C对其进行了重写

在经典类中 调用D的save方法 搜索按深度优先 路径B-A-C, 执行的为A中save 显然不合理
在新式类的 调用D的save方法 搜索按广度优先 路径B-C-A, 执行的为C中save

#经典类
class A:
    def __init__(self):
        print this is A

    def save(self):
        print come from A

class B(A):
    def __init__(self):
        print this is B

class C(A):
    def __init__(self):
        print this is C
    def save(self):
        print come from C

class D(B,C):
    def __init__(self):
        print this is D

d1=D()
d1.save()  #结果为‘come from A

 

#新式类
class A(object):
    def __init__(self):
        print this is A

    def save(self):
        print come from A

class B(A):
    def __init__(self):
        print this is B

class C(A):
    def __init__(self):
        print this is C
    def save(self):
        print come from C

class D(B,C):
    def __init__(self):
        print this is D

d1=D()
d1.save()   #结果为‘come from C‘

 

Python中新式类 经典类的区别(即类是否继承object)

标签:sel   http   子类   python   self   rom   color   多继承   bug   

原文地址:http://www.cnblogs.com/attitudeY/p/6789370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!