1. 面向对象的两个特点
1.1. class 类
class类, 就是对一类拥有相同属性的对象的抽象、蓝图、原型的集合
在类中定义了这些对象的都具备的属性(variables(data))、共同的方法
1.2. Object 对象
Object对象即是一个列经过实例化后产生的一个实例, 一个类在没有实例化之前是无法被使用的
2. 面向对象的三大特性
2.1. 封装 ( Encapsulation )
一个类, 在创建之后, 内部的方法是无法进行直接调用的, 是因为类的封装特性. 类将多个函数或其他进行封装, 外部是无法直接对其进行查看的, 只能通过实例化后才能进行调用
2.2. 继承 ( Inheritance )
一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承. 子类可以使用父类的方法
2.3. 多态 ( Polymorphism )
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态,
3. 实例化
3.1. 什么是实例化
1)把一个类变成一个具体对象的过程叫做 实例化 ( 初始化 )
2)如果没有实例化, 使用完之后就会被程序释放掉, 实例化后则不会被释放
3.2. 实例化做了什么
1)类在没有实例化调用时, 就已经被读到内存中了, 但是不会对类进行语法判断
2)实例化过程中就是会将实例化后的变量名传入到类中 (self 就会为了接收实例化后的变量名的)
3)在类中自己创建的函数是不会重新复制的, 只有在引用时才会到没有实例化的类中调取该函数
4)调取函数是, 会将 self 替换为 实例化时的变量名
3.3. 如何实例化
1)由图中所示, 类的实例化就是将一个类做一个指针, 指向一个变量,这个过程就是实例化, a 就叫做 Dog 类的实例
4. 类
4.1. 类介绍
其中:
n = "Alex" # 叫类变量
self.name = name # 叫做实例变量
bulk,samoye 这里两个函数, 在类中叫做这个类的方法(功能,动态属性)
1) 其中实例变量,在不同的实例化中是无法共享的,但是类变量可以。
2) 所以可以说实例变量的作用域就是实例本身
3) 实例变量又叫做静态属性
4) 所以 静态属性就是变量, 动态属性就是方法
5) 如果在类中有两个变量名相同,一个是类变量, 一个是实例变量, 那在调用时是先找实例变量, 如 果 实例变量中没有才会找类变量
6)实例变量的作用: 用于描述每个实例特定的属性的
7)类变量的作用: 用于提供所有实例的公用的属性
8)类变量与实例变量不同,不是每次实例化都要进行读取与重新赋值的,所以对于全部相同的数属性就可以使用类变量
4.2 对已经实例化的值进行增删改
所以我们是做的是:
1)在实例化后修改实例化是的值的
2)可以在实例化后 添加一个新值
3)添加值是对 a 实例的操作,对其他的实例没影响
4)也可以删除已经定义好的变量
(使用 del , 如 del a.name)
4.3. 更改类变量
1)由图中可以看到, a.n 改变了,其实 这个操作就是, 在 a实例中加入了一个 n="1_Alex" 的方法,通过这个来实现更改的效果,所以对 b 实例没有影响
2)响之所以能实现, 是因为解释器在读取白能量是是从内到为进行读取的, 也就是从今到远进行读取变量的, 如果在类中和全局变量中都有N这个属性的话就默认调用类中的不读取全局的, 这就是 及近原则
4.4. 直接修改 原类属性,看 a、b的变化
1)我对类本身进行操作,如图中的 Dog.n = "ABC" , 那么, 这种情况下, b 会修改, 而a 不会, 因为 a的变量中就已经有了n 不会去类中找
2)所以只要实例变量中没有 n 的就会去类中找 n 值, n 值就会发生改变
4.5. 如果 n 是一个不会自动复制的元素哪, 如列表、元祖等
1)我们从右图中发现 Dog.n 发生了改变,这是因为列表, 字段, 元祖,等属性属于不会自动进行复制的元素
2)实例化后实例内部的 n 是不会自己生产, 而是指向了 Dog.n 的内存地址, 随意在右图中,b.n 与 Dog.n 实际上是一个内存地址,所以源 Dog 才会发生改变
5. 类的特殊方法
5.1. 构造函数:(init)
作用是在实例化时 , 做一些类的初始化工作, 如赋予实例变量, 实例在实例化时就开始执行某些函数
5.2. 析构函数(del)
1)是在实例释放、销毁的时候自动执行的,通常用于一些收尾工作,如关闭一些 数据库链接、打开的临时文件(如右图)。
2)结束实例可以使用 del 方法,但是要保证只有一个变量指向了这个实例, 否则实例无法释放。 所以 del 方法删除的是变量名而不是数据。只要数据没有了变量名就会被python 当做垃圾收回
-
5.3. 私有属性,私有方法(体现了类的封装)
1)私有属性:只有类的内部才能被调用的属性叫做私有属性(属性就是变量)
2)私有方法: 只有内部才能调用的方法叫做私有方法(方法就是类内部的函数)
3)这两个都是在名字前面加上 "__" 双下划线