文章目录
- 一、类的构成
- 1.1 类
- 1.2 实例
- 1.3 方法
- 1.3.1 构造方法
- 1.4 属性
- 1.4.1 类的私有属性
- 1.4.2 类的私有方法
- 二、继承
- 2.1 性质
- 2.2 抽象类
- 2.3 多重继承
- 三、封装
- 四、成功的面向对象语言的五个基本特性
一、类的构成
1.1 类
一种复杂的数据类型,将不同类型的数据和与这些数据相关的操作封装在一起的集合体
class className:
attrs = attrsValue
def __init__(self):
initStatements
def methodName(self):
methodStatements
1.2 实例
类的具体对象
类实例化后,可以使用其属性和方法
a = className()
self
:本质上是类的一个实例,用于在类的内部传递参数导入的数据
1.3 方法
类似于函数
它们必须有一个额外的第一个参数名称 self
,也可以用 this
1.3.1 构造方法
对象都有这个方法,用于对类进行初始化,在实例化的时候会调用
def __init__(self):
initStatements
1.4 属性
- 数据属性:类中的变量
- 函数属性:就是方法
1.4.1 类的私有属性
两个下划线开头,声明该属性为私有,不能通过类的外面调用。只能在类内部的方法中使用
如果想在类的外部调用私有属性,需要定义接口函数
1.4.2 类的私有方法
方法名以两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用
二、继承
class class_B:
a = 1
b = 2
class class_A(class_B):
c = 3
d = 4
A = class_A()
print(A.a)
如果 Class_A
继承自 Class_B
,称:
-
Class_A
是Class_B
的子类,Class_B
是Class_A
的父类(超类) -
Class_B
称为基类,Class_A
称为派生类
继承的作用:
- 实现代码的重用
- 实现属性和方法的继承
2.1 性质
- 子类拥有了父类的全部方法和属性
- 如果子类有和父类同样的方法和属性,子类的方法和属性会覆盖父类的方法和属性,这叫重写 (override)
- 子类可以继承系统已有的类
重度的继承并不是好事
重写显示了 OOP 的特性之一,多态 (Polymorphism):相同的信息给予不同的对象会引发不同的动作
super(class, object).method()
:用于调用父类的一个方法
2.2 抽象类
抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化。
由于 Python 没有抽象类、接口的概念,所以要引入 abc 库
from abc import ABC, abstractmethod
要在 Python 类中使用抽象方法,首先要继承 abc.ABC
,然后给实例方法加上装饰器 @abstractmethod
,这样该类不能被直接实例化,要想使用该类,应继承该类并实现所有的抽象方法
2.3 多重继承
多重继承是一把双刃剑
继承顺序:
- 默认调用的是在括号中排前的父类的方法
- 广度优先
三、封装
封装(encapsulation)是对对象(object)的一种抽象,即隐藏类或者模块的某些部分,只提供接口(interface)给外部使用,封装和类的私有化息息相关
四、成功的面向对象语言的五个基本特性
- 万物皆为对象
- 程序是对象的集合,他们通过发送消息来告知彼此所要做的
- .每个对象都有自己的由其他对象所构成的存储
- 每个对象都拥有其类型
- 某一特定类型的所有对象可以接受同样的消息(多态)