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