Python经典类与新式类已经经典继承和新式继承;以及继承顺序

原创 2018年04月17日 17:44:50

经典类和新式类,以及经典继承和新式继承

# class Animal:   #经典类
class Animal(object):  #新式类
    def __init__(self,name):
        self.name = name
    def eat(self,foot):
        print('can eat',foot)

class Relation(object):
    def make_friends(self,obj):
        print('%s is making friends with %s'%(self.name,obj.name))
class Dog(Animal,Relation): #如果它们都有构造函数,在继承顺序上就会先继承Animal的init构造函数
    # def __init__(self,age):    #这样直接就会覆盖父类的所有构造函数
    #     self.age = age
    #所以要这样
    def __init__(self,name,age):
        # Animal.__init__(self,name) #方法一 经典类的写法
        super(Dog,self).__init__(name) #方法二 这种方法比较好 新式类的写法
        self.age = age
    def run(self):
        print('Dog is run soon')
        print('%d'%self.age)
    # def eat(self):   #直接就将父类方法替换了
    #     print('dog is can eat')
    def eat(self,foot):
        Animal.eat(self,foot)  #这样就可以在父类方法里面添加方法
        print('The dog is can eat')

class Cat(Animal):
    def pashu(self):
        print('cat can pashu %s'%self.name)

dog = Dog('dog',10)
# dog.eat('面包')
# dog.run()

cat = Cat('cat')
# cat.pashu()

# 下面这个就是多继承,注意,这里的cat作为一个参数传进去了
# 其实很好理解
# dog继承了Relation,因此可以多继承
dog.make_friends(cat)

经典类和新式类的继承顺序

#经典类和新式类的继承顺序
class A:
    def __init__(self):
        print('A')
    def __str__(self): #使用之后打印对象时就会有输入
        return 100
class B(A):
    # def __init__(self):
    #     print('B')
    pass
class C(A):
    # def __init__(self):
    #     print('C')
    pass
class D(B,C):
    #这种情况,是先走本身的构造函数,然后根据顺序走其他的:广度优先,横向查找
    #为什么这样说,因为在B,C时没有在向B、C的父类查询,而是作为最后查询
    #和上边的相反的查询就是深度优先,记住Python3都是广度优先,
    #在python2经典类是按深度优先继承的,新式类是按广度优先继承的
    #python3都是按照广度优先继承的,class A: 经典类class A(object):新式类
    # def __init__(self):
    #     print('D')
    pass
# 如果它们都有构造函数,那么构造函数会怎么走
# 测试一下吧
obj = D()
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haeasringnar/article/details/79978236

CTI的典型应用之三

CTI的典型应用之三◆ 电话语音卡 黄至周  电话语音卡,确切地说,应称为“电脑与电话语音处理卡”,作为公共电话网与电脑的接口设备,近年来在中国通讯市场中异军突起,正日益成为发展最快,应用最广的通讯产...
  • tchaikov
  • tchaikov
  • 2000-12-20 17:11:00
  • 779

Python 经典类和新式类 super用法 (四)

在Python2.x的2.2以上版本中,新式类是继承object的类。 经典类的MRO(基类搜索顺序)算法是深度优先。 新式类的MRO算法是C3算法。 经典类 class A:pass clas...
  • xhw88398569
  • xhw88398569
  • 2015-09-22 22:21:20
  • 2165

python新式类多重继承 广度优先搜索 C3算法

http://www.cnblogs.com/mingaixin/archive/2013/01/31/2887190.html mro即 method resolution order (...
  • lewis_bo
  • lewis_bo
  • 2015-02-04 23:08:49
  • 1291

Python新式类和经典类的区别

从Python2.2开始,Python 引入了 new style class(新式类) 新式类跟经典类的差别主要是以下几点: 新式类对象可以直接通过__class__属性获取自身...
  • u010066807
  • u010066807
  • 2015-07-15 18:04:04
  • 8209

Python中新式类和经典类的区别

本文参考Python核心编程一书 class MyNewObjectType(bases): 'define MyNewObjectType class' class_suite #...
  • Four_Infinite
  • Four_Infinite
  • 2016-10-14 09:20:53
  • 633

python新式类和经典类的区别?

1)首先,写法不一样: class A: pass class B(object): pass 2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索。 3)新式类...
  • nopara
  • nopara
  • 2017-07-09 23:41:17
  • 345

细说python类1——经典类和新式类

python中的类分为新式类和经典类,具体有什么区别呢?简单的说, 1.新式类都从object继承,经典类不需要。 2.经典类继承深度优先,经典类继承广度优先。 3.新式类相同父类只执行一次构造函数,...
  • u010576100
  • u010576100
  • 2016-01-27 14:31:41
  • 1650

Python新式类与经典类(旧式类)的区别

Python新式类与经典类(旧式类)的区别 Python中类分两种:旧式类和新式类: ➤新式类都从object继承,经典类不需要。 ➤新式类的MRO(method resolution orde...
  • zimou5581
  • zimou5581
  • 2016-11-06 12:15:03
  • 4168

Python学习笔记8-类的继承 、深度优先、广度优先

Python 类声明 语法:  class 类名: 类体 例: #--encoding:utf-8-- # class AddressBookEntity: myVersio...
  • work201003
  • work201003
  • 2016-01-05 16:31:35
  • 2228

python 经典类和新式类

python 经典类和新式类
  • u010839779
  • u010839779
  • 2017-08-17 00:07:55
  • 228
收藏助手
不良信息举报
您举报文章:Python经典类与新式类已经经典继承和新式继承;以及继承顺序
举报原因:
原因补充:

(最多只允许输入30个字)