继承

继承

一、什么是继承

  • 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类继承了一个类,类中的属性和方法就在子类中了
  • 继承的特性是:子类会遗传父类的属性
  • 继承是类与类之间的关系

二、为什么要用继承

  • 使用继承可以减少代码的冗余

三、对象的继承

1. Python中支持一个类同时继承多个父类

class student:
    pass
class class1:
    pass
class subject(student,class1):
    pass

2.使用__bases__方法查看对象继承的类

print(Sub1.__bases__)

(<class 'main.Parent1'>, <class 'main.Parent2'>)

  • 在python3中如果一个类没有继承任何一个类,则默认继承object类
  • 在pythjon2中如果一个类没有继承任何类,不会继承object类
print(Parent1.__bases__)

(<class 'main.student'>, <class 'main.class1'>)

四、类的分类

4.1 新式类

  • 继承了object的类以及该类的所有子类,都是新式类
  • python3中所有的类都是新式类

4.2.经典类

  • 没有继承object的类以及该类的子类,都是经典类
  • 只有python2中才有经典类

五、继承

5.1多层继承

class D:  #D继承object
    print('ddd')
class C(D):  #c继承D
    print('ccc')
class B(C):  #B继承c
    print('bbb')
class A(B):    #A继承B
    print('aaa')

5.2多继承

class D:  #D继承object
    print('ddd')
class C:  
    print('ccc')
class B:  
    print('bbb')
class A(B,C,D):    #A继承B,C,D
    print('aaa')

5.3多继承的多层继承

class G:  #G继承object
    print('ddd')
class F(G):  
    print('ccc')
class E(G):  
    print('bbb')
class D(G):  
    print('ddd')
class C(F):  
    print('ccc')
class B(E):  
    print('bbb')
class A(B,C,D):    #A继承B,C,D
    print('aaa')

5.4继承与重用性

在开发程序的过程中,如果我们定义了一个类A,然后又想新建立另外一个类B,但是类B的大部分内容与类A的相同时

我们不可能从头开始写一个类B,这就用到了类的继承的概念。

通过继承的方式新建类B,让B继承A,B会‘遗传’A的所有属性(数据属性和函数属性),实现代码重用

#继承的代码实现
class Animal:

    def eat(self):
        print("%s 吃 " %self.name)

    def drink(self):
        print ("%s 喝 " %self.name)

    def shit(self):
        print ("%s 拉 " %self.name)

    def pee(self):
        print ("%s 撒 " %self.name)


class Cat(Animal):

    def __init__(self, name):
        self.name = name
        self.breed = '猫'

    def cry(self):
        print('喵喵叫')

class Dog(Animal):

    def __init__(self, name):
        self.name = name
        self.breed='狗'

    def cry(self):
        print('汪汪叫')


# ######### 执行 #########

c1 = Cat('小白家的小黑猫')
c1.eat()

c2 = Cat('小黑的小白猫')
c2.drink()

d1 = Dog('胖子家的小瘦狗')
d1.eat()

派生

当然子类也可以添加自己的新属性或者在自己这里重新定义属性(不会影响到父类),需要注意的是,一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己为准了。

原文地址:https://www.cnblogs.com/wwbplus/p/11430344.html