文章目录

  • 一、类的构成
  • 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. 数据属性:类中的变量
  2. 函数属性:就是方法



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_AClass_B 的子类, Class_BClass_A 的父类(超类)
  • Class_B 称为基类,Class_A 称为派生类


继承的作用:

  • 实现代码的重用
  • 实现属性和方法的继承



2.1 性质



  1. 子类拥有了父类的全部方法和属性
  2. 如果子类有和父类同样的方法和属性,子类的方法和属性会覆盖父类的方法和属性,这叫重写 (override)
  3. 子类可以继承系统已有的类


重度的继承并不是好事



重写显示了 OOP 的特性之一,多态 (Polymorphism):相同的信息给予不同的对象会引发不同的动作



super(class, object).method():用于调用父类的一个方法




2.2 抽象类



抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化。



由于 Python 没有抽象类、接口的概念,所以要引入 abc 库

from abc import ABC, abstractmethod



要在 Python 类中使用抽象方法,首先要继承 abc.ABC,然后给实例方法加上装饰器 @abstractmethod,这样该类不能被直接实例化,要想使用该类,应继承该类并实现所有的抽象方法




2.3 多重继承



多重继承是一把双刃剑



继承顺序:

  1. 默认调用的是在括号中排前的父类的方法
  2. 广度优先



三、封装



封装(encapsulation)是对对象(object)的一种抽象,即隐藏类或者模块的某些部分,只提供接口(interface)给外部使用,封装和类的私有化息息相关




四、成功的面向对象语言的五个基本特性



  1. 万物皆为对象
  2. 程序是对象的集合,他们通过发送消息来告知彼此所要做的
  3. .每个对象都有自己的由其他对象所构成的存储
  4. 每个对象都拥有其类型
  5. 某一特定类型的所有对象可以接受同样的消息(多态)