python 学习第十五天(继承)

继承

python中继承分为单继承和多继承

class parent1: #如果没有继承,python3中会默认继承object这个类
    pass


class parent2:
    pass


class son1(parent1):  #单继承,父类是parent1
    pass


class son2(parent1,parent2):  #多继承,父类是parent1和parent2 
    pass
  • 继承的特性
    子类会继承父类的所有属性和方法,但是在子类中重新定义了父类已有的方法或属性,子类调用时会调用子类定义的方法或属性
class parent1:
    a=12
    pass


class parent2:
    pass


class son1(parent1):
    a=13

    pass


class son2(parent1,parent2):
    pass

print(parent1.a,son1.a,son2.a)
#12 13 12 方法也是类似的
  • 继承的顺序
    这里写图片描述

    继承关系如箭头所示,当A调用一个方法或属性时,如果A中没有定义,就会去B里面找,B再没有去C找,依次是EFGD



class D:
    pass
class C(D):
    pass
class F(D):
    pass
class B(C):
    pass
class E(F):
    pass
class G(D):
    pass
class A(B,E,G):
    pass

print(A.mro())    #这个是方法解析顺序列表

#[<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.E'>, <class '__main__.F'>, <class '__main__.G'>, <class '__main__.D'>, <class 'object'>]

  • 子类中调用父类的方法

class parent:
    def __init__(self,name,age):
        self.name=name
        self.age=age
class son(parent):

    def __init__(self,name,age,sex):
        super().__init__(name,age)
        self.sex=sex
s=son('k',12,'man')
print(s.__dict__)  # {'name': 'k', 'age': 12, 'sex': 'man'}
#__dict__是属性字典
  • 接口
    规定一些类共有的方法但不实现,实现是由实现(继承)了这个接口的子类完成
import abc
class  animal(metaclass=abc.ABCMeta):  #animal 就是个接口
    @abc.abstractmethod
    def cry(self):
        pass
    @abc.abstractmethod
    def eat(self):
        pass

class dog(animal): #dog 这个类实现了animal这个接口
    def __init__(self,name):
        self.name=name

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


    def eat(self,food):
        print('%s正在吃%s'%(self.name,food))


class cat(animal):
    def __init__(self, name):
        self.name = name

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

d=dog('蛋黄')
c=cat('毛毛') # 由于cat这个类没有实现animal接口中的eat方法,所以在实例化时会报错         

猜你喜欢

转载自blog.csdn.net/CZ505632696/article/details/81322200