面向对象、类
一、面向对象
什么是面向对象?
面向对象是一门编程思想!
面向过程编程思想与面向对象编程思想对比:
- 面向过程编程思想:
核心是 “过程”二字,过程是指解决问题的步骤,即先干什么再干什么!
基于该编程思想编写程序,就好比在设计一条工厂流水线,一种机械式的思维方式
优点:
将复杂的问题流程化,进而简单化
缺点:
牵一发而动全身,程序的可扩展性差
- 面向对象编程思想:
核心是 “对象” 二字,对象指的是“特征与技能”的结合体。
基于该编程思想编写程序,就好比把自己当做一个上帝在创造世界,一种“上帝式”的思维方式
优点:
可扩展性高
缺点:
面向对象编写程序的复杂程度比面向过程高
注意:编程思想仅仅是一门思想,与任何技术无关
二、类
1、什么是类?
类指的是类型、类别。
在两种角度去看待类:
- 现实世界中:
- 先有一个个对象,经过社会的文明发展,随之总结出类,对象是实际存在的,而类是抽象产生的
- python程序中:
- 必须先由类,再通过调用类产生对象
对象指的是“特征与技能”的结合体, 类指的是一系列“对象之间相同的特征与技能”的结合体
2、如何定义类?
如何写类并产生对象:
- 先从现实世界中通过一个个对象总结出类
- 然后再定义类,后调用产生对象。
比如 “选课系统”:
选课系统 – 学生类:
- 学生对象1:
特征:
- 姓名:tank
- 性别:female
- 年龄:95
- 学校:家里蹲
技能:
- 技术:python
- 学习:learn
- 选课:course
- 学生对象2
特征:
- 姓名:jason
- 性别:female
- 年龄:99
- 学校:家里蹲
技能:
- 技术:python
- 学习:learn
- 选课:course
3、定义类的语法
语法:
class 关键字:帮你产生类
class 类名:
- 对象之间相同的特征
- 学校
school = “家里蹲”
- 对象之间相同的技能
- python
def Python():
pass
- learn
def Learn():
pass
- course
def Course():
pass
类名的规范:
- 驼峰命名法(推荐)
定义一个学生类并对属性进行增删查改:
# 定义一个家里蹲学生类 class JldStudent: # 类名指向的是类的内存地址 # 学生相同的特征 # 在类中的特征(即变量)称之为“属性” school = "OldBoy" # 注意:在类内部定义函数,会默认产生一个参数self # 学生相同的技能(即函数)称之为“方法” def learn(self): # self此处当做一个形参 print("learning...") # 查看类的名称空间 print(JldStudent.__dict__) print(JldStudent.__dict__["school"]) # 可调用属性 print(JldStudent.__dict__["learn"]) # 获取learn方法对象 JldStudent.__dict__["learn"](123) # 方法对象+(),相当于执行learn函数(方法) # 类提供了一种特殊获取名字的方式 “类名.名字”的方式 # 查 print(JldStudent.school) JldStudent.learn(12) # 改 JldStudent.school = "Cld" print(JldStudent.school) # 删 del JldStudent.school # print(JldStudent.school) # AttributeError: type object "JldStudent" has no attribute "school" # 增 JldStudent.age = 18 print(JldStudent.age)