概述
OOP 思想
- 接触到任意一个任务,首先想到的是任务中的世界的构成(模型化)
几个名词
名词 | 释义 |
---|---|
OO | 面向对象 |
OOA | 面向对象分析 |
OOD | 面向对象设计 |
OOI | 面向对象实现 |
OOP | 面向对象编程 |
- 面向对象的实现过程:
OOA
>OOD
>OOI
类与对象
-
概念
术语 概念 类 抽象名词,代表一个集合,共性的事物 对象 具象的事物,单个个体 -
关系
术语 释义 类 抽象,代表一大类事物 对象 具象,代表某一类事物的某一个个体 -
类的两个内容
术语 释义 属性(变量) 表明事物的特征 成员方法(函数) 表明事物功能或动作
类的基本实现
类的命名
- 遵守变量命名的规范
- 使用大驼峰,形如
YorkFish
- 尽量避开系统命名
类的声明
- 必须用
class
关键字 - 类由“属性”和“方法”构成,不允许出现别的
- 定义成员属性可以直接使用变量赋值,如果没有值,允许使用
None
类的实例化
class Person:
pass
york = Person() # 实例化了一个对象
类与成员
访问对象成员
class Person:
def __init__(self, age=18):
self.age = age
def learn(self, lesson="Python"):
print("I am learning %s." % lesson)
york = Person()
print(york.age) # 使用点操作符访问对象
york.learn()
检查所有成员
- 通过默认内置变量检查
检查类的所有成员
class Person:
pass
print(Person.__dict__)
检查对象的所有成员
class Person:
pass
york = Person()
print(york.__dict__)
成员分析
-
“类”与“对象”都可以存储成员,成员可以归“类”所有,也可以归“对象”所有
-
“类”存储成员时使用的是与“类”关联的一个“对象”
-
“对象”访问一个成员时
- 如果“对象”中没有该成员,尝试访问“类”中的同名成员
- 如果“对象”中有此成员,一定使用“对象”中的成员
-
创建“对象”时,“类”中的成员不会放入对象当中,而是得到一个空对象,没有成员
-
通过“对象”对“类”中成员重新赋值,或者通过“对象”添加成员时,对应成员会保存在对象中,而不会修改类成员
self
self
在对象的方法中表示当前对象本身- 通过对象调用一个方法时,该对象会将“自己”自动传至当前方法的第一个参数中
- 即,哪个对象调用的方法,方法内的
self
就是指向哪个对象的引用
self
并不是关键字- 它只是一个用于接收对象的普通参数
- 可以用任何一个普通变量名代替,但不推荐
- 方法中有
self
形参的方法称为非绑定类的方法,可以通过对象访问 - 方法中没有
self
的是绑定类的方法,只能通过类访问 - 使用类访问绑定类的方法时,如果类方法中需要访问当前类的成员,可以通过
__class__.成员名
来访问