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篇文章。大家可以去看看
我的理解更多的的是基于老师课堂上的讲解。就是我知道什么是多态也知道是怎么回事,可是我就说不出来