类和正则表达(自动更正和代数运算)
一、面对对象的三个要素
1.封装:
封装是指将数据与具体操作的实现代码放在某个对象内部,使这些代码的实现细节不被外界发现,外界只能通过接口使用该对象,而不能通过任何形式修改对象内部实现,正是由于封装机制,程序在使用某一对象时不需要关心该对象的数据结构细节及实现操作的方法。使用封装能隐藏对象实现细节,使代码更易维护,同时因为不能直接调用、修改对象内部的私有信息,在一定程度上保证了系统安全性。
2.继承:
继承来源于现实世界,一个最简单的例子就是孩子会具有父母的一些特征,即每个孩子都会继承父亲或者母亲的某些特征,当然这只是最基本的继承关系,现实世界中还存在着更复杂的继承,面向对象之所以使用继承机制主要是用于实现代码的复用多个类所公用的代码部分可以只在一个类中提供,而其他类只需要继承即可。
3.多态:
多态与继承纤细紧密,是面向对象编程中另一个突出的特征,所谓的多态是指在继承体系中,所有派生类都从基类继承接口,但由于每个派生类都是独立的实体,因此在接收同一消息的时候,可能会生成不同的响应。多态的作用作为隐藏代码实现细节,使得代码能够模块化;扩展代码模块,实现接口重用。简单来说:一种行为产生多种效果。
总的来说:封装可以隐藏实现细节同时包含私有成员,使得代码模块化并增加安全指数;基础可以扩展已存在的模块,目的是为了代码重用;多态则是为了保证:类在继承和派生的时候,保证家谱中任何类的实例被正确调用,实现了接口重用。
二、python以下化线开头的变量名特点
Python中,以下划线开头的变量名有特殊的含义,尤其是在类的定义中。用下划线作为变量前缀和后缀来表示类的特殊成员:
l _xxx:这样的对象叫做保护变量,不能用'from module import *'导入,只有类对象和子类对象能访问这些变量;
l __xxx__:系统定义的特殊成员名字;
l __xxx:类中的私有成员,只有类对象自己能访问,子类对象也不能访问到这个成员,但在对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问。Python中没有纯粹的C++意义上的私有成员。
三、设计一个三维向量类,并实现向量的加法、减法以及向量瑜标量的乘法和除法
实例代码:
class vector3: def __init__(self, x_ = 0, y_ = 0, z_ = 0): self.x = x_ self.y = y_ self.z = z_ def __add__(self, obj): return vector3(self.x+obj.x, self.y+obj.y, self.z+obj.z) def __sub__(self, obj): return vector3(self.x-obj.x, self.y-obj.y, self.z-obj.z) def __mul__(self, obj): return vector3(self.x*obj.x, self.y*obj.y, self.z*obj.z) def __pow__(self, obj): return vector3(self.y*obj.z-obj.y*self.z, self.z*obj.x-self.x*obj.z, self.x*obj.y-obj.x*self.y) def __str__(self): return str(self.x)+','+str(self.y)+','+str(self.z) v1 = vector3(1, 2, 3) v2 = vector3(0, 1, 2) print (v1 + v2) print (v1 - v2) print (v1 * v2) print (v1 ** v2)
运行结果:
四、编写一个程序(类),用户输入一段英文,然后输出这段英文中所有长度为3个字母的单词; 并且如果单词如果有连续重复了2次,只输出一个
【例如:This is is a desk,程序输出 This is a desk】。(提示,有re,正则匹配来做)
实例代码:
import re x = input('Please input a string:') pattern = re.compile(r'\b[a-zA-Z]{3}\b') print(pattern.findall(x))
结果如图: