🌴 2022.04.20 下午
文章目录
前言
🎬本文章是 【Python语言基础】 专栏的文章,主要是上课的随堂笔记与练习
🔗Python专栏 传送门
💻提示:本文的环境配置是Python3的开发环境。目录顺序以当堂内容(教材)为准,所以并非“1、2、3”
📽本节主要内容:python与C+和JAVA一样也有类、对象、成员…学习python面向对象程序设计可以对比着学习,更好理解
6 面向对象程序设计
6.1 概述
🚀 程序设计方法
- 计算机程序设计的语言有很多种,如C/C++、C#、Java和Python等
- 程序设计语言描述计算机系统的方式一般有两种:面向过程程序设计(Procedure Oriented Programming, POP)和面向对象程序设计(Object Oriented Programming,OOP)
- POP把计算机程序视为一系列命令的集合,即一组函数按照事先设定的顺序依次执行,函数是程序的基本单元
- 为了简化程序设计,把函数继续分解为子函数来降低程序的复杂度。使用POP的程序设计语言有C、Python等
- OOP是一种新的程序设计思想和方法。OOP把计算机程序视为一组对象(Object)的集合,每个对象都可以接收其他对象发送的消息,并处理这些消息。 计算机程序的执行指一系列消息在各个对象之间传递
- 支持OOP的程序设计语言有C++、C#、Java、Python等
- OOP的基本思想是,将数据以及对数据的操作封装在一起,组成一个相互依存、不可分割的整体,即对象
- 对相同类型的对象进行分类、抽象后,得出共同特征而形成类
- 面向对象程序设计的关键是,如何合理地定义和组织这些类及类之间的关系
- OOP的基本概念包括对象、类、消息、封装、继承和多态等。其中,封装、继承和多态是OOP最重要的三个特征
🚀 Python中的面向对象程序设计
Python不仅支持POP,更是一种面向对象、高级的动态编程语言,完全支持OOP的各项功能,如封装、继承、多态及对类方法的覆盖或重写等
Python中对象的概念很广泛,一切内容都可以看成对象
6.2 类与对象
6.2.1 类的定义
类是一种类型,对象是该类型的一个变量
类是抽象的,一般不占用内存空间;对象是具体的,创建一个对象时要为其特征分配相应的内存空间
定义类的一般格式为
class 类名:
"""类说明"""
类体
- 组成:主要由类头和类体两部分组成
- 类头:由关键字class开头,后面是类的名称
- 类体:类体中包含类的实现细节,向右缩进对齐。类体中一般包含两部分内容
- 数据成员:用来存储特征的值(体现对象的特征),简称为成员
- 成员方法:用来对成员进行操作(体现对象的行为),简称为方法
- 类说明:类中也可以选择性添加类的文档字符串,对类的功能等进行说明(就是通过注释生成自己的一个API文档)
- 要使用类中定义的成员和方法,必须对类实例化,即创建类的对象
- 在Python中,使用赋值的方式创建类的对象,其一般格式为:
对象名 = 类名([参数列表])
- 对象创建后,可以使用“对象.成员”“对象.方法()”调用该类的成员和方法
6.2.2 对象创建和使用
创建一个类的对象,调用类中的方法
#定义类
class Car:
#定义构造方法,self代表类的对象,而非类本身
def __init__(self,name):
self.name = name
#定义方法
def getName(self):
return self.name
#创建对象
c1 = Car("奔驰")
print("这辆汽车的品牌:",c1.getName())
'''
这辆汽车的品牌: 奔驰
'''
6.3 类的成员
6.3.1 成员类型
按照能否在类的外面直接访问,类的成员可分为如下两种
- 公有成员:公有成员不以下画线开头,在类的内部可以访问,在类的外面也可以访问
- 私有成员:以单下画线或双下画线开头,在类的外面不能直接访问,只能在类的内部访问或在类的外面通过对象的公有方法访问
在形式上,以单下画线或双下画线开头的是私有成员
_xxx
:一个以下画线开头的成员。类和派生类可以访问这些成员__xxx
:以两个或更多下画线开头但不能以两个或更多下画线结束的成员。对该成员,只有类自己可以访问,派生类也不能访问按照归属于类还是对象,类的成员可分为两类
- 类成员:定义在类体中且在所有方法外的成员为类成员。类成员属于类本身,一般通过类名调用,不建议使用对象名调用
- 实例成员:在类的方法中定义的成员为实例成员。实例成员只能被对象调用。实例成员一般在构造方法
__init__()
中创建,或在其他方法中创建
创建及使用类的公有成员和私有成员
#定义类
class Woman:
def __init__(self,name,sex,age):
self.name = name #定义公有成员
self._sex = sex #定义单下画线私有成员
self.__age = age #定义双下画线私有成员
def getAge(self):
return self.__age
#创建对象
w = Woman("小芳","Female",18)
print("姓名: %s, 性别: %s, 年龄: %d."%(w.name,w._sex,w.getAge()))
'''
姓名: 小芳, 性别: Female, 年龄: 18
'''
类成员和实例成员的创建及使用
#定义类
class Student:
chinese = 142
maths = 1
english = 141
#定义构造方法
def __init__(self,name):
self.name = name
#创建对象
s1 = Student("马允")
print(s1.name + "的语文成绩: " + str(Student.chinese))
print(s1.name +