Day7 类的继承和继承实现的原理

本文详细介绍了Python中的继承概念,包括单继承、多继承及其调用顺序,并通过实例演示了如何使用继承来减少代码重复,展示了经典类与新式类的区别。

继承可以分为但继承,多继承。

 1 继承的基本形式
 2 class ParentClass1(object): #定义父类
 3     pass
 4 
 5 class ParentClass2: #定义父类
 6     pass
 7 
 8 class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass
 9     pass
10 
11 class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类
12     pass
13 
14 
15 
16 
17 print(SubClass1.__bases__)   #显示他继承了几类
18 print(SubClass2.__bases__)
19 print(ParentClass1.__bases__)

 

 

经典类和新式类:

两者区别在python3中是没有区别的,都有有个继承,如果没定义继承,也会默认将object继承,都叫新式类。

两者的区别在python2才有区别,没有定义就是经典类,如果定义了继承就是新式类。

 1 class Animal:
 2     x=1
 3     def __init__(self,name,age,sex):
 4         self.name=name
 5         self.age=age
 6         self.sex=sex
 7         # print('Animal.__init__')
 8     def eat(self):
 9         print('%s eat' %self.name)
10 
11     def talk(self):
12         print('%s say' %self.name)
13 
14 class People(Animal):
15     x=10
16     def __init__(self,name,age,sex,education):
17         Animal.__init__(self,name,age,sex)
18         self.education=education
19         # print('People.__init__')
20 
21     def talk(self):
22         Animal.talk(self)
23         print('这是人在说话')
24 
25 class Dog(Animal):
26     pass
27 class Pig(Animal):
28     pass
29 
30 
31 peo1=People('alex',18,'male','小学肄业')
32 print(peo1.__dict__)
33 peo1.talk()
34 print(peo1.x)
35 
36 dog1=Dog('yuanhao',28,'male')
37 pig1=Pig('wupeiqi',18,'male')
38 
39 
40 print(peo1.name)
41 print(dog1.name)
42 print(pig1.name)

 

 

类的继承:

 1 class OldboyPeople:
 2     school = 'oldboy'
 3     def __init__(self,name,age,sex):
 4         self.name=name
 5         self.age=age
 6         self.sex=sex
 7 
 8     def eat(self):
 9         print('is eating')
10 
11 class OldboyStudent(OldboyPeople):
12     def learn(self):
13         print('%s is learning'  %self.name)
14 
15 
16 class OldboyTeacher(OldboyPeople):
17     def __init__(self,name,age,sex,salary,title):
18         OldboyPeople.__init__(self,name,age,sex)
19         self.salary=salary
20         self.title=title
21 
22     def teach(self):
23         print('%s is teaching'  %self.name)
24 
25 
26 yl_obj=OldboyStudent('yanglei',28,'female')
27 egon_obj=OldboyTeacher('egon',18,'male',3.1,'沙河霸道金牌讲师')


总结;

1,继承功能之一:解决类与类之间代码重复

2,继承是类与类之间的关系,是一种,什么是什么的关系

3,在子类派生出新的属性,以自己的为准。

4,在子类派生出新的方法内重用弗雷的功能的方式:指名道姓

eg:OldboyPeople.__init__

  这种调用方法本身跟继承没有关系

 

 

继承实现的原理:

 

调用顺序:

单继承的话:如果执行的话先找自己的范围内,当没有的时候再去找父类。(就是不管怎么找,都是先从自身找齐)

 1 #单继承
 2 class A:
 3     def f1(self):
 4         print('A.f1')
 5 
 6     def f2(self):
 7         print('A.f2')
 8         self.f1() #b.f1()
 9 
10 class B(A):
11     def f1(self):
12         print('B.f2')
13 
14 
15 b=B()
16 # b.f2=111111
17 b.f2()

 

多继承的话:

 

 1 #多继承
 2 class J:
 3     def test(self):
 4         print('J')
 5 class A(J):
 6     # def test(self):
 7     #     print('A')
 8     pass
 9 class E(J):
10     def test(self):
11         print('E')
12     pass
13 class H(J):
14     def test(self):
15         print('H')
16 
17 class G(H):
18     def test(self):
19         print('G')
20     pass
21 class B(A):
22     # def test(self):
23     #     print('B')
24     pass
25 class D(E):
26     def test(self):
27         print('D')
28     pass
29 class F(G):
30     def test(self):
31         print('F')
32     pass
33 class C(B,D,F):
34     # def test(self):
35     #     print('C')
36     pass
37 
38 c=C()
39 # c.test=1111
40 c.test()
41 

 

#可以利用*.mro()来查看他的调用顺序

eg: print(c.mro())

 

转载于:https://www.cnblogs.com/sexiaoshuai/p/7372067.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值