Python 面向对象(二)

面向对象的三大特性
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‘>

在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()

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

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

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

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

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()

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

时间: 2024-10-13 20:26:07

Python 面向对象(二)的相关文章

python面向对象二

1.1类的静态属性,类方法,类的静态方法 1.1.1静态属性(@property) 在类中: python内置的@property装饰器就是负责把一个方法(函数)变成属性来调用. class Student: def __init__(self,name,age,score): self.name = name self.age = age self.score = score @property def get_score(self): return self.score def learn(

python面向对象(二)

类的成员 类的成员可以分为三大类:字段.方法和属性 一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class foo: # 字段(静态字段,保存在类里) cc = '111' def __init__(self): # 字段(普通的字段,保存在对象里) self.name = 'mxz' def f1(self): print(self.name) class Province: # 静态字段 cou

Python 面向对象 二

通过此方法communicate  管道 日志模块logging python单独提供 re.split(规则,字符串,1)以第一个符合规则的进行分割. random 模块 将数字转换为字母char(65) = A __init__:构造方法,实例化的时候执行 经典类: 如: class N: pass 新式类: 如: class M(object): pass 一个类不管直接或间接的继承object类就是新式类.推荐使用新式类 两者区别: 继承:java.C# 不支持多继承,python 支持

Python 面向对象(二) 特殊方法

一些Python特殊方法的汇总 __bases__              类的基类,返回元祖__base__                类的基类,也叫父类__call__                  '类名()',类名加括号调用时执行的语句__class__               表示当前操作的对象的类是什么__del__                   析构方法,对象在内存中被释放时,自动触发执行__dict__                  存储类或实例的所有属性

四十一、python面向对象二

A.成员: 1.字段:静态字段(每个对象都有同一字段),普通字典(每个对象都有不同的数据) 2.方法:静态方法(无需使用对象的内容),类方法,普通方法(使用对象中的数据) 3.特性:普通特性(将方法伪造成字段) 通过类去访问的有:静态字段,静态方法,类方法 通过对象去访问的有:普通字段,类的方法 自己的成员自己去访问 静态方法:没有self,前添加@staticmethod,即为静态方法(通过类去访问) 类方法:比静态方法多一个参数,该参数是为了显示哪个类,前添加@classmethod 特性:

Python自动化开发 - 面向对象(二)

本节内容 1.isinstance(obj,cls)和issubclass(sub,super) 2.反射 3.__setattr__,__delattr__,__getattr__ 一. isinstance(obj,cls)和issubclass(sub,super) 1.isinstance(obj,cls) 检查obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstance(obj, Foo)) # True 2.

Python 面向对象进阶(二)

1. 垃圾回收 小整数对象池 Python对小整数的定义是 [-5, 257),这些整数对象是提前建立好的; 在一个Python程序中,所有位于这个范围内的整数,使用的都是同一个对象; 单个字符共用对象,常驻内存; 大整数对象池 每一个大整数,均创建一个新的对象; intern机制 单个单词,不可修改,默认开启intern机制,共用对象,当引用计数为0时,则销毁; 字符串(含有空格),不可修改,没有开启intern机制,不共用对象; # 示例: a1 = "Helloworld" a2

Python之路【第十二篇】:Python面向对象高级

一.反射 1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩. 2 python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) 导入其他模块,利用反

python面向对象进阶

isinstance(obj,cls)检查是否obj是否是类 cls 的对象. isinstance(obj,cls)检查是否obj是否是类 cls 的对象. 反射 python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数(参数是对象,字符串格式的属性名) hasattr getattr setattr delattr __del__,就是析构方法,当对象在内存中被释放时,自动触发执行. 注:此方法一般无须定义,

python 面向对象(进阶篇)

上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 面向对象三大特性:封装.继承和多态 本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象