Python努力学习笔记(第十三课)

Python学习第十三课

1. 继承

子类继承父类的属性和方法
想想你从你老爸那里继承的房子、和车子(负债)你老子有一个东西(属性、方法),然后你老子把这个东西传给你了,你也有了这个东西(属性、方法);这就是继承

class Fa(object):
	name = '一家之主'
    def car(self):
        print('宾利车')
    def house(self):
        print('别墅')
        
# 思路三: 直接从fa类中继承它的属性和方法
# class Me(fa):
#     pass

class Me(Fa):
    def car(self):
        print('甲壳虫车')
    def house(self):
        print('出租屋')

me = Me()
me.car
me.house

注意:接下来的代码是老师讲解时写的,自己写的话理解还有点问题

2. 方法的重写

  • 如果在⼦类中有和⽗类同名的⽅法,则通过⼦类实例去调⽤⽅法时,会调⽤⼦类的⽅法⽽不是⽗类的⽅法,这个特点我们称之为⽅法的重写(覆盖)
  • 当我们调⽤⼀个对象的⽅法时:
    • 会优先去当前对象中寻找是否具有该⽅法,如果有则直接调⽤
    • 如果没有,则去当前对象的⽗类中寻找,如果⽗类中有则直接调⽤⽗类中的⽅法
    • 如果没有,则去⽗类中的⽗类寻找,以此类推,直到找到object,如果依然没有找到就报错了
#方法的重写: 如果在子类中有和父类同名的方法,则通过子类实例去调用方法时,会调用子类的方法而不是父类的方法,这个特点我们称之为方法的重写(覆盖)
class A(object):
    def test(self):
        print('A.....')

class B(A):
    def test(self):
        print('B.....')

class C(B):
    pass

c = C()
c.test()

在这里插入图片描述

3. super

  • super()可以获取当前类的⽗类
  • 并且通过super()返回对象调⽤⽗类⽅法时,不需要传递self
class Animal(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('动物')

    def sleep(self):
        print('动物会睡觉')

    def run(self):
        print('动物会跑')


class Dog(Animal):

    def __init__(self, name, age): 
# 多态是⾯向对象的三⼤特性之⼀。从字⾯理解就是多种形态
# ⼀个对象可以以不同形态去呈现
# ⾯向对象三⼤特性
# 封装 确保对象中数据的安全
# 继承 保证了对象的扩展性
# 多态 保证了程序的灵活性
        self.name = name
        self.age = age
        super().__init__(self.name, self.age)
        print('狗')

    def sleep(self):
        print('狗会睡觉')
        super().sleep()

    def run(self):
        print('狗会跑')

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


dog = Dog('狗', 18)
dog.sleep()

在这里插入图片描述

4. 多重继承

  • 在Python中是⽀持多重继承的。也就是我们可以为⼀个类同时制定- 多个⽗类
  • 可以在类名的()后边添加多个类,来实现多重继承
  • 多重继承,会使⼦类同时拥有多个⽗类,并且会获取到所有⽗类中⽅法
  • 在开发中没有特殊情况,应该尽量避免使⽤多重继承。因为多重继承会让我们的代码更加复杂
  • 如果多个⽗类中有同名的⽅法,则会先在第⼀个⽗类中寻找,然后找第⼆个,找第三个…前⾯会覆盖后⾯的
class A(object):
    def test(self):
        print('A....')


class B(object):
    # def test(self):
    #     print('B。。。。')
    pass

class C(B, A):
    pass

c = C()
c.test()
# 获取C所有的父类的方法
print(C.__bases__)

# 解耦合的作用:
# 1, 提高问题的解决概率。 
# 2. 提高问题的解决效果  
# 3. 提高问题的解决速度  
# 4. 降低将来爆发隐患的可能性

5. 多态

  • 多态是⾯向对象的三⼤特性之⼀。从字⾯理解就是多种形态
  • ⼀个对象可以以不同形态去呈现
  • ⾯向对象三⼤特性
    • 封装 确保对象中数据的安全
    • 继承 保证了对象的扩展性
    • 多态 保证了程序的灵活性
class Duck(object):
    def fly(self):
        print('鸭子沿着地面飞起来了')

class Swan(object):
    def fly(self):
        print('天鹅在空中翱翔')

class Plane(object):
    def fly(self):
        print('飞机在云层飞翔')

def fly(obj):
    obj.fly()


duck = Duck()
fly(duck)
swan = Swan()
fly(swan)
plane = Plane()
fly(plane)

在这里插入图片描述

多态这里需要多看看,我的这里写的过于简单了。

https://blog.csdn.net/legend818/article/details/90673547
https://blog.csdn.net/qq_42784898/article/details/82809422

这是我当时理解Python的多态时看的2篇文章。大家可以去看看
我的理解更多的的是基于老师课堂上的讲解。就是我知道什么是多态也知道是怎么回事,可是我就说不出来

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值