Python-面向对象编程-继承

继承

概念

继承是指在现有类的基础上派生出新的类。新有类将共享现有类的属性和行为,并且可以在派生类中新增属性和行为。当我们定义一个class的时候,可以从某个现有的class继承,新的class称为派生类、子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。

格式

class 类名(父类):
    pass

特性

子类可以继承父类的全部属性和方法。

Dog 和 Cat 类什么也没写,就拥有了父类的whoami方法。

class Animal():
    def whoami(self):
        print('我是一只动物')

class Cat(Animal):
    pass

class Dog(Animal):
    pass

cat1 = Cat()
dog1 = Dog()
cat1.whoami()
dog1.whoami()

---------------------
输出:
我是一只动物
我是一只动物

子类可以覆盖父类方法。

当子类的方法和父类的方法同名是,子类方法覆盖父类方法。 

class Animal():
    def whoami(self):
        print('我是一只动物')

class Cat(Animal):
    pass

class Dog(Animal):
    def whoami(self):
        print('我不仅是动物,我是狗,非常狗')

cat1 = Cat()
dog1 = Dog()
cat1.whoami()
dog1.whoami()

-------------
输出:
我是一只动物
我不仅是动物,我是狗,非常狗

父类中有__init__,子类中复用。

使用super().__init__(),调用父类中的__init__() 

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


class Dog(Animal):
    def __init__(self, name, age, color):
        super().__init__(name, age)
        self.color = color

    def __str__(self):
        return '小狗的名字:' + self.name + ',年龄:' + str(self.age) + ',颜色:' + self.color

dog1 = Dog('meatball', 3, 'black')
print(dog1)

-------------------
输出:
小狗的名字:meatball,年龄:3,颜色:black

多重继承

格式

class 类名(父类A, 父类B...):
    pass

为什么要多重继承?

多重继承可以减少类的层次。

一般情况下继承是主线单一继承下来,但如果需要“混入”其他功能,就可以用到多重继承。这种设计模式通常称之为MixIn。

非多重继承

 

多重继承

 

多重继承示例

class Animal():
    def msg(self):
        print('我是一只动物')

class Swim():
    def skill(self):
        print('我会游泳')

class Fly():
    def skill(self):
        print('我会飞')

class Fish(Animal, Swim):
    pass

class Bird(Animal, Fly):
    pass

fish1 = Fish()
bird1 = Bird()
print('----fish1----')
fish1.msg()
fish1.skill()
print('----bird1----')
bird1.msg()
bird1.skill()

---------------------
输出:
----fish1----
我是一只动物
我会游泳
----bird1----
我是一只动物
我会飞

查看多重继承搜索顺序

(搜索方法的优先级) 

  • 类名.__mro__
  • inspect.getmro(类名);(需要import inspect)
class Animal():
    def msg(self):
        print('我是一只动物')

class Fly():
    def skill(self):
        print('我会飞')

class Bird(Animal, Fly):
    pass

print(Bird.__mro__)

--------------------
输出:
(<class '__main__.Bird'>, <class '__main__.Animal'>, <class '__main__.Fly'>, <class 'object'>)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值