抽象性

定义类主要是规定出其属性和行为。属性和行为是通过对同类对象的抽象分析得到的。属性和行为都是为对象准备的。

面向对象的编程语言都具有的特征

封装性

封装之后程序的安全性增加了,有些东西可以不被用户看到。修改类之后,只要涉及到此的地方,都会发生改变。
对类的定义就是规定该类的属性和行为。

  1. 属性是描述所定义类的对象特征的若干变量
  2. 行为就是以函数形式能够对该类对象进行的操作

继承性

继承就是说和已有类(父类)相同的部分属性与行为从已有类中继承下来,在扩充定义新类(子类)额外需要的属性和行为即可。
如果要定义的新类的部分属性和已有类相同(比如老师和学生,都有一个相同的部分:人,可以把的属性抽出来作为他们的父类),可以通过继承已有类的方式得到新类。
继承可以简化新类的定义,增强了代码的重用性。

多态性

类的部分特征具有多种状态。
人可以唱歌、睡觉。人的子类农民、教师、工人自然可以唱歌、睡觉。但是他们的唱歌方式可以不同,唱歌的种类也不同。在人的子类里面就可以再次定义唱歌的方式。这个叫做函数重载/函数多态
python中有加、减、乘、除四个运算,在我们的类里面就可以重新定义加、减、乘、除,比如说在我的类里面我可以定义学生+学生的计算方法为两名学生入学成绩的相加。这叫做运算符重载/运算符多态

面向对象与面向过程的区别

面向对象时,类里面的内容可见行可以设置。

  1. 数据操作更加安全
  2. 代码重用性更好

类和对象

类和对象的定义

类的使用需要通过对象完成

定义类的语法格式

class 类名:
   定义数据成员(属性)
   定义成员函数(行为)
类名必须由字母数字下划线组成,并且只能以下划线或者字母开头,严格区分大小写。一般首字母大写。多个单词组成的话,每个单词首字母都大写

定义对象的语法格式

对象=类名(实参表)
实参可加可不加

访问对象成员名的语法格式

对象名.成员
比如:张三.睡觉

定义类和对象示例

类里面,下划线越多,隐秘性越强
一个函数中定义的变量,不能在别的函数中使用,但是在类里面,一旦加上 self. 就表示这是整个对象的属性,不同函数之间可以调用

class Rect:
	def __init__(self,le,wi):  # self必须写,表示对象本身。括号中的名字除了self,在构造的时候都要写上
		self.__length=le  # 构造方法
		self.__width=wi   #  self.__length、self.__width称为属性
	def calArea(self):  # 驼峰规则(第一个单词首字母不大写,后面每个单词的首字母大写),函数名以动词开头(潜规则)
		return self.__length*self.__width
	def calCircu(self):
		return (self.__length*self.__width)*2
r1 = Rect(10, 5)
print(r1.calArea())  # 便可以获取r1的面积

构造函数与析构函数函数

构造函数

构造函数的做用是为对象的数据成员赋初值,函数名固定为__init__,其作用是为对象的数据成员赋初值,函数名固定,一般需要带若干个参数,第一个参数固定为self,代表当前对象。
除第一个参数外,其他参数可以带默认值

构造函数带默认值

def __init__(self, le=1, wi=1):
	self.__length=le
	self.__width=wi

通过定义方法修改参数

def setLength(self, length):
	self.__length=length
def setWidth(self, width):
	self.__width=width

改变数据成员值的函数与构造函数的区别

构造函数在定义对象时自动执行,用于给对象属性赋值,不能显式调用
改变数据成员值的函数需要时显示调用

析构函数

删除类时默认执行,用于对象撤销时释放所占用空间。一般处于类的最后。

def __del__(self):

python中较少使用,主要是python有自身的自动内存管理功能,当系统发现某些对象不再使用,就会自动删除。

私有成员和共有成员

python中不同成员的性质体现在名字上

私有成员(private)两个下划线:只能在当前类中使用,其子类不能调用。
受保护的成员(protected)一个下划线:类本身和其子类都可以调用。
公有的的成员(public)无下划线:子类和对象成员都可以发现。

def calArea(self):
	self.area=self.__length*self.__width
	return self.area

经过上述定义,在输入r1.的时候就可以看到area,暴露出来就成为了属性,属性就可以被修改值。

类与对象习题python继承_编程语言

在类外访问私有

在类外直接访问私有成员会报错,可以通过以下方法在类外直接访问私有成员:
对象名._类名__私有成员名

r1=Rect()
r1.calArea()
print(r1._Rect__area)

类成员和对象成员

在类内但在各成员函数之外定义的数据成员称为类成员,在成员函数内定义的变量称为对象成员,其中对象成员用的最多

存储方式

对象成员:每个成员单独存储
类成员:所有成员都存储在一个地方

数据成员访问示例

class Rect:
	__total=0                       # 类成员
	def __init__(self, le, wi):   
		self.__length=le             # 对象成员
		self.__width=wi