首页 > 编程语言 > 详细

Python 面向对象(二)

时间:2018-05-06 12:57:12      阅读:230      评论:0      收藏:0      [点我收藏+]

 

 

 

面向对象的三大特性
1 继承
2 封装
3 多态

 

绑定方法与非绑定方法

异常处理

上次复习:
定义类的时候 建议首字母大写
名称空间以字典形式显示
__init__ 这个函数不能有返回值
内部可以有一些其他逻辑,比如判断
举例:

技术分享图片

 

 

绑定方法在调用的时候 谁调用绑定方法就会把谁传进去

 

1 继承
2 封装
3 多态


继承 封装 多态 会体现面向对象的可扩展性

1 继承
什么是继承
是一种新建类的方式,新建的类是子类,子类会遗传父类的属性
作用:减少代码的冗余
在Python当中,子类可以继承1个或多个父类
python支持多继承
子类称之为派生类 父类可以被称为基类 派生类
在Python2当中类分为两种 1 经典类 2 新式类


继承的写法:

技术分享图片
 1 #定义2个父类
 2 class Parent1:
 3     pass
 4 
 5 class Parent2:
 6     pass
 7 
 8 #定义2个子类
 9 #子类的单继承
10 class sub1(Parent1):
11     pass
12 #子类的多继承
13 class sub2(Parent1,Parent2):
14     pass
15 #查看子类继承了哪些父类__bases__
16 # print(sub1.__bases__)  #(<class ‘__main__.Parent1‘>,)
17 # print(sub2.__bases__)   #(<class ‘__main__.Parent1‘>, <class ‘__main__.Parent2‘>)
18 #
19 #
20 # print(Parent1.__base__)#<class ‘object‘>
View Code

 

在Python2当中类分为两种
1 经典类 2 新式类:
1 经典类 指的是没有继承object类的类,以及该类的子类
2 新式类 指的是继承object类的类,以及该类的子类



在Python3当中,统一为新式类,默认都继承object


先抽象再继承

1一系列对象得到一种类

2总结类之间相似部分就可以得到父类
3 子类是父类的关系

 

 减少代码的冗余

示例代码:

技术分享图片
 1 #原来的书写方式 这样写有代码冗余
 2 
 3 #1  student类
 4 class Student:
 5     school=oldboyedu
 6     def __init__(self,name,age,sex):
 7         self.Name=name
 8         self.Age=age
 9         self.Sex=sex
10 
11     def learn(self):
12         print(%s is learning%self.Name)
13 
14 
15 class Teacher:
16     school = oldboyedu
17 
18     def __init__(self, name, age, sex):
19         self.Name = name
20         self.Age = age
21         self.Sex = sex
22 
23     def teach(self):
24         print(%s is teach python%self.Name)
25 
26 #通过继承的方式减少冗余
27 
28 class OldboyPerson:
29     school=oldboyedu
30     def __init__(self,name,age,sex):
31         self.Name=name
32         self.Age=age
33         self.Sex=sex
34     def tell_info(self):
35         print(info:%s-%s-%s%(self.Name,self.Age,self.Sex))
36 class Student(OldboyPerson):
37     def learn(self):
38         print(%s is learning%self.Name)
39 
40     def tell_info(self):
41         print(infostuent:%s-%s-%s%(self.Name,self.Age,self.Sex))
42 class Teacher(OldboyPerson):
43     def teach(self):
44         print(%s is teach python%self.Name)
45     def tell_info(self):
46         print(infoteacher:%s-%s-%s%(self.Name,self.Age,self.Sex))
47 
48 
49 #派生的概念 参照对象的属性查找顺序:
50 #对象的名称空间-->对象所在类的数据属性函数属性-->如果没有的话查找继承的父类的数据属性和函数属性
51 
52 
53 stu1=Student(nod,25,M)
54 tea1=Teacher(luna,26,F)
55 stu1.tell_info()
56 tea1.tell_info()
View Code

 

 

如果对象的类有继承的话,对象属性的查找顺序是先从对象本身查找,再查找对象的类,
最后再查找对象继承的类

 

 

03  子类重用父类的功能,方法

 

先来一段示例:

技术分享图片
 1 class Foo:
 2     def f1(self):
 3         print(foo.f1)
 4     def f2(self):
 5         print(foo.f2)
 6         self.f1()    #obj.f1()
 7 
 8 class Bar(Foo):
 9     def f1(self):
10         print(bar.f1)
11 
12 obj=Bar()
13 
14 obj.f2()
15 #以上代码的执行效果
16 #foo.f2
17 #bar.f1
View Code

说明:找的顺序始终跟之前一样

 

 

如果子类派生出新的属性是以自己的为准
子类派生出新方法要重用父类的功能时 不依赖于继承 重用父类的方法

OldboyPeople.tellinfo(self)

 

示例代码

技术分享图片
 1 #子类重用父类的方法示例
 2 class OldboyPerson:
 3     school=oldboyedu
 4     def __init__(self,name,age,sex):
 5         self.Name=name
 6         self.Age=age
 7         self.Sex=sex
 8     def tellinfo(self):   #此处的self是1个object  有名称空间
 9         print(info is %s-%s-%s%(self.Name,self.Age,self.Sex))
10 class Teacher(OldboyPerson):
11     def teach(self):
12         print(%s is teach%self.Name)
13 #需要重用父类的方法 父类当中本身有tellinfo方法  但是子类当中的tellinfo新增了部分功能
14     def tellinfo(self):
15         print(Teacher info)
16         OldboyPerson.tellinfo(self)
17 class Student(OldboyPerson):
18     def learn(self):
19         print(%s is learning%self.Name)
20     def tellinfo(self):
21         print(student info)
22         OldboyPerson.tellinfo(self)  #重用父类的方法
23 
24 stu1=Student(nod,25,M)
25 stu1.tellinfo()
26 tea1=Teacher(luna,26,F)
27 tea1.tellinfo()
28 
29 
30 #子类重用父类的属性 自己还要新增部分属性示例
31 #不依赖于继承  重用父类的方法
32 
33 
34 class OldboyPerson:
35     school=oldboyedu
36     def __init__(self,name,age,sex):
37         self.Name=name
38         self.Age=age
39         self.Sex=sex
40     def tellinfo(self):
41         print(info is %s-%s-%s%(self.Name,self.Age,self.Sex))
42 
43 class Student(OldboyPerson):
44     def __init__(self,name,age,sex,course,id):
45         OldboyPerson.__init__(self,name,age,sex)
46         self.Course=course
47         self.Id=id
48     def tellinfo(self):
49         print(student info ,end=‘‘)
50         OldboyPerson.tellinfo(self)   #不依赖于继承  重用父类的方法
51         print(%s-%s%(self.Course,self.Id))
52         print(self.__dict__)
53 
54 stu2=Student(nod,25,F,linux,51)
55 stu2.tellinfo()
View Code

 

Python 面向对象(二)

原文:https://www.cnblogs.com/nodchen/p/8997771.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!