继承

继承: 解决代码的重复性

继承语法:

1 class A:
2     pass
3 class B(A):    #父类名
4     pass
5 # B继承A,A是父类,B是子类
6 # A是父类 基类 超类
7 # B是子类 派生类
# 需求:定义一个动物类,让猫跟够继承动物类,动物类中的方法有吃,喝,睡
# 猫类:爬树
# 狗类:看家
# 子类可以使用父类重点的:方法,静态变量
 1 class Animal:   #动物
 2     def __init__(self,name):
 3         self.name = name
 4     def eat(self):    #
 5         print('%s is 吃'% self.name)
 6     def drink(self):    #
 7         print('%s is 喝' % self.name)
 8     def sleep(self):    #
 9         print('%s is 睡' % self.name)
10 class Cat(Animal):    #猫类继承动物类
11     def climb_tree(self):    #爬树
12         print('%s is 爬树' % self.name)
13 class Dog(Animal):    #狗类继承动物类
14     def Housekeeping(self):    #看家
15         print('%s is看家'%self.name)
16 小花猫 = Cat('小花猫')    #实例化
17     # 先开辟空间,空间里有一个类指针-->指向Cat
18     # 调用init,对象在自己的空间中找init没找到,到Cat类中找init也没找到,
19     # 找父类Animal中的init
20 小花猫.eat()
21 小花猫.sleep()
22 小花猫.climb_tree()
23 大黄狗 = Dog('大黄狗')
24 大黄狗.Housekeeping()
25 大黄狗.eat()
26 大黄狗.sleep()
27 # 结果:
28 # 小花猫 is 吃
29 # 小花猫 is 睡
30 # 小花猫 is 爬树
31 # 大黄狗 is看家
32 # 大黄狗 is 吃
33 # 大黄狗 is 睡
#当子类和父类的方法重名的时候,我们只使用子类的方法,而不会去调用父类的方法了
 1 class Animal:   #动物
 2     def __init__(self,name):
 3         self.name = name
 4     def eat(self):    #
 5         print('%s is 吃'% self.name)
 6     def drink(self):    #
 7         print('%s is 喝' % self.name)
 8     def sleep(self):    #
 9         print('%s is 睡' % self.name)
10 class Cat(Animal):    #猫类继承动物类
11     def eat(self):    #子类跟父类从名
12         print('%s is 吃鱼' % self.name)
13 小白 = Cat('小白')
14 小白.eat()
15 # 结果:
16 # 小白 is 吃鱼
# 子类想要调用父类的方法的同时还想执行自己的同名方法
# 猫和狗在调用eat的时候既调用自己的也调用父类的,
# 在子类的方法中调用父类的方法 :父类名.方法名(self)
 1 class Animal:   #动物
 2     def __init__(self,name):
 3         self.name = name
 4     def eat(self):    #
 5         print('%s is 吃'% self.name)
 6     def drink(self):    #
 7         print('%s is 喝' % self.name)
 8     def sleep(self):    #
 9         print('%s is 睡' % self.name)
10 class Cat(Animal):    #猫类继承动物类
11     def eat(self):    #吃,猫中自己的方法
12         print('猫吃鱼')
13         Animal.eat(self)    #同名在子类调用父类中的方法
14         print('猫吃鱼')
15     def climb_tree(self):    #爬树
16         print('%s is 爬树' % self.name)
17 class Dog(Animal):    #狗类继承动物类
18     def Housekeeping(self):    #看家
19         print('%s is看家' % self.name)
20     def eat(self):    #吃,狗中自己的方法
21         Animal.eat(self)#同名在子类调用父类中的方法
22         print('狗吃骨头')
23 小猫 = Cat('小猫')
24 小狗 = Dog('小狗')
25 小猫.eat()
26 小狗.eat()
27 # 结果:
28 # 小猫 is 吃
29 # 猫吃鱼
30 # 小狗 is 吃
31 # 狗吃骨头
# 继承语法 class 子类名(父类名):pass
# 父类和子类方法的选择:
# 子类的对象,如果去调用方法
# 永远优先调用自己的
# 如果自己有 用自己的
# 自己没有 用父类的
# 如果自己有 还想用父类的 : 直接在子类方法中调父类的方法 父类名.方法名(self)
# 单继承
# 调子类的 : 子类自己有的时候
# 调父类的 : 子类自己没有的时候
# 调子类和父类的 :子类父类都有,在子类中调用父类的
单继承语法:
 2 class D:
 3     def func(self):
 4         print('in D')
 5 class C(D):pass
 6 class A(C):
 7     def func(self):
 8         print('in A')
 9 class B(A):pass
10 B().func()    #==A().func
11 # 结果:in A
12 #A是B的父类,C是A的父类,D是C的父类
# 多继承 有好几个爹
# 有一些语言不支持多继承 java
# python语言的特点 : 可以在面向对象中支持多继承
# 一个类有多个父类,在调用父类方法的时候,按照继承顺序,先继承的就先寻找
多继承语法:
1 class B:
2     def func(self):print('in B')
3 class A:
4      def func(self):print('in A')
5 class C(B,A):pass    #多继承,继承了B跟A
6 C().func()    #B().func
7 # 结果:in B
# 补充:
# object类 类祖宗
# 所有在python3当中的类都是继承object类的
# object中有init
# 所有的类都默认的继承object

# class A(object):
# pass
# a = A()
# 开空间
# 调用init
原文地址:https://www.cnblogs.com/yjtxin/p/12374642.html