类和对象是面向对象中的两个重要概念。
类:是对事物的抽象,比如汽车模型。
对象:是类的一个实例,比如:大卡车。
二者之间的联系:类是把对象抽象化,对象是把类实例化。这个有点像哲学上上的个体和整体。当然个体还可以继续细分,这种就是一种分而治之和分类思想。
一、面向对象
三大特性:封装、继承和多态
1、封装
概念:封装就是讲内容封装到某个地方,以后再去调用被封装在某处的内容
所以,在使用面向对象的封装特性时,需要:
- 将内容封装到某处(可以被封装的内容有哪些)
- 从某处调用被封装的内容(如果在多层封装中找到指定的方法并调用
2、继承
继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。
例如:
猫:喵喵叫、吃、喝、拉、撒
狗:汪汪叫、吃、喝、拉、撒
3、多态
Pyhon不支持多态并且也用不到多态,多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。
二、类
1. Python中类的定义、结构、创建
1 使用class关键字定义一个类,并且类名首字母要大写; 2 创建的类型不能用简单类型表示时就需要创建类; 3 类把需要的变量和函数组合,这种包含也称之为“封装”
2. Python类的结构
1 Class 类名: 2 成员变量(属性) 3 成员函数(方法)
3. 类的创建
1 class MyClass(): 2 def fun(self): # self 是必须的 3 print('I am ***")
4. 类的属性
类由属性和方法组成,类的属性是对数据的封装,类的方法则是对类的行为的封装。类的属性按使用范围分为公有属性和私有属性,类的属性范围取决于属性的名称。
公有属性:类中和类外都可以调用的属性
私有属性:不能被类以外的函数调用,只能通过类的内部方法调用。(其实也可以通过instance.classname__attribute方式访问,但只用于调试程序)。定义方式:以"–"双下划线开始的成员变量就是私有属性,否则是共有属性。
内置属性:由系统在定义类的时候默认添加的,由前后两个下划线构成
5. 定义类的方法
和函数定义一样,但需要self作为第一个参数。
类的方法也分为:公有方法和私有方法。
公有方法:只有实例化之后才能被调用。
私有方法:不能被外部的类和方法调用,私有方法的定义和私有属性定义都是一样的,在方法前面加上’__'双下划线就可以了;
类方法:被classmethod()函数处理过的函数,能被类所直接调用,也能被对象所调用(是继承关系)
静态方法:相当于"全局函数",可以被类直接调用,可以被所有实例化对象共享,通过staticmethod()定义静态方法没有"self"语句;
self参数:用于区分函数和类的方法(必须有一个self),self参数表示指向对象本身。
简单阐述一下划线开头变量的特点:
在Python中,以下划线开头的变量名有特殊的含义,尤其是在类的定义中。用下划线作为变量前缀和后缀来表示类的特殊成员:
| _xxx:这样的对象叫做保护变量,不能用'from module import *'导入,只有类对象和子类对象能访问这些变量;
|| __xxx__:系统定义的特殊成员名字;
||| __xxx:类中的私有成员,只有类对象自己能访问,子类对象也不能访问到这个成员,但在对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问。Python中没有纯粹的C++意义上的私有成员。
实例
三维向量的类:
代码如下1:
class xiangliang3: def __init__(self, x=0, y=0, z=0): self.X = x self.Y = y self.Z = z def __add__(self, n): r = xiangliang3() r.X = self.X + n.X r.Y = self.Y + n.Y r.Z = self.Z + n.Z return r def __sub__(self, n): r = xiangliang3() r.X = self.X - n.X r.Y = self.Y - n.Y r.Z = self.Z - n.Z return r def __mul__(self, n): r = xiangliang3() r.X = self.X * n r.Y = self.Y * n r.Z = self.Z * n return r def __truediv__(self, n): r = xiangliang3() r.X = self.X / n r.Y = self.Y / n r.Z = self.Z / n return r def __floordiv__(self, n): r = xiangliang3() r.X = self.X // n r.Y = self.Y // n r.Z = self.Z // n return r def show(self): print((self.X,self.Y,self.Z)) v1 = xiangliang3(1,2,3) v2 = xiangliang3(4,5,6) v3 = v1+v2 v3.show() v4 = v1-v2 v4.show() v5 = v1*3 v5.show() v6 = v1/2 v6.show()
执行结果: