希望所有温柔又可爱的人最后都能幸福❤
今日总结:
代码量 | 200行 |
---|---|
博客量 | 一篇 |
所学时间 | 4小时左右 |
了解到的知识点 | python面向对象继承 |
明日计划:
早上 | python面向对象多态 |
---|---|
下午 | python单例设计模式 |
晚上 | 无 |
具体内容:
继承
继承实现代码的重用,相同的代码不需要重复的编写
继承:子类拥有父类的所有方法和属性
class Animal:
def eat(self):
print("吃---")
def drink(self):
print("喝---")
def run(self):
print("跑---")
def sleep(self):
print("睡---")
class Dog(Animal):
def bark(self):
print("汪汪叫")
xsy = Dog()
xsy.eat()
xsy.drink()
xsy.run()
xsy.sleep()
xsy.bark()
-
子类继承父类,可以直接享受父类中已经封装好的方法,不需要再次开发
-
子类中应该根据职责,封装子类特有的属性和方法
专业术语
Dog
类是Animal
类的子类,Animal
类是Dog
类的父类,Dog
类从Animal
类继承Dog
类是Animal
类的派生类,Animal
类是Dog
类的基类,Dog
类从Animal
类派生
继承的传递性
-
C
类从B
类继承,B
类又从A
类继承 -
那么
C
类就具有B
类和A
类的所有属性和方法
子类拥有父类以及父类的父类中封装的所有属性和方法
class Animal:
def eat(self):
print("吃---")
def drink(self):
print("喝---")
def run(self):
print("跑---")
def sleep(self):
print("睡---")
class Dog(Animal):
def bark(self):
print("汪汪叫")
class XiaoSongYue(Dog):
def fly(self):
print("我会飞")
class Cat(Animal):
def catch(self):
print("抓老鼠")
xsy = XiaoSongYue()
# xsy.catch()
xsy.fly()
xsy.eat()
xsy.drink()
xsy.run()
xsy.sleep()
xsy.bark()
方法的重写
-
子类拥有父类的所有方法和属性
-
子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发
当父类的方法实现不能满足子类需求时,可以对方法进行重写
具体实现就相当于在子类中定义了一个跟父类同名的方法
class Animal:
def eat(self):
print("吃---")
def drink(self):
print("喝---")
def run(self):
print("跑---")
def sleep(self):
print("睡---")
class Dog(Animal):
def bark(self):
print("汪汪叫")
class XiaoSongYue(Dog):
def fly(self):
print("我会飞")
def bark(self):
print("神一样的叫唤...")
# 使用super(),调用原本在父类中封装的方法
super().bark()
print("*%*$**%#*%$*^*$^*$^")
xsy = XiaoSongYue()
xsy.bark()
- 子类对象不能在自己方法内部,直接访问父类的私有属性或私有方法
- 子类对象可以通过父类的公有方法间接访问到私有属性或私有方法
多继承
- 子类可以拥有多个父类,并且具有所有父类的属性和方法
class A:
def test(self):
print("A---test 方法")
def demo(self):
print("A---demo 方法")
class B:
def test(self):
print("B---test 方法")
def demo(self):
print("B---demo 方法")
class C(A, B):
pass
# 创建子类对象
c = C()
c.test()
c.demo()
print(C.__mro__)
避免父类中出现同名方法,通过__mro__
查看执行顺序
新式类与旧式类
object
是python
为所有对象提供的基类,提供有一些内置的属性和方法,可以使用dir
函数查看
在python3.x
中如果没有指定父类,默认使用object
基类