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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haeasringnar/article/details/79978236

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

# 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()
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页