面向对象基础
知识点
备注:类更注重对象和职责,不同的对象承担不同的责任
概念
1 | # 类是一类具有相同特征/行为的事物的统称,是抽象的概念,不能直接使用 |
1 | # 在完成需求前,首先要确定职责 -- 要做的事情(方法) |
类的设计
1 | # 先有类,后有对象 |
dir():查看对象的所有属性和方法
1 | # 查看对象所拥有的属性、方法 |
内置函数/方法
方法名 | 作用 |
---|---|
__new__ | 创建对象时,自动调用 |
__init__ | 对象初始化时,被自动调用 |
__del__ | 对象从内存中删除,会被自动调用 |
__dir__ | 返回对象的描述信息,print函数输出使用 |
类的定义和使用
1 | # 定义类需要使用class |
对象的引用
1 | # 在python中使用类创建对象(一个变量)以后,该变量记录的仍然是对象在内存中的地址 |
属性
1 | # (不推荐) 给对象临时添加一个属性,可以通过赋值的方式, |
1 | class Cat: |
初始化:__init__
1 | # 使用类名创建对象时,会自动执行如下操作: |
对象销毁:__del__
1 | # 一个对象被从内存中销毁之前,会自动调用__del__方法 |
打印自定义内容:__str__
1 | # 希望print输出变量对象时能够打印自定义的内容,就可以利用__str__这个内置方法 |
身份运算符
备注:身份运算符用于比较两个对象的内存地址是否一致 – 是否是对同一个对象的引用,在python中对于None的判断建议用身份运算符进行判断
运算符 | 描述 |
---|---|
x is y | 判断x和y是不是引用同一个对象,相当于id(x) == id(y) |
x is not y | 判断x和y是不是引用不同对象,相当于id(x) != id(y) |
is和==的区别:is用于判断两个变量引用对象是否为同一个,==用于判断引用变量的值是否相等
私有属性、方法
备注:在子类中是无法访问父类中定义的私有对象,父类的私有对象只能在父类的内部被其自己的方法所访问
1 | # 实际开发中,对象的某些属性、方法不希望被外部访问到,只允许在对象的内部被使用,此时就用到私有属性、方法 |
备注:在python中并没有真正意义上的私有属性、方法
1 | # (科普)私有属性的访问方式:对象名._类名__属性名,私有方法类似,但开发中不要使用这种方式访问 |
作业
(问答)事物的特征在类中被称为什么,事物的行为在类中被称为什么
(问答)根据需求设计类的过程是什么样的
(问答)类名的定义符合什么规则
(问答)如何查看一个对象中所有的属性和方法
(问答)默认使用print打印一个对象,会得到什么
(问答)内存中的地址常用什么进制
(问答)查看下面的代码,其中方法中的参数self,有什么作用
1
2
3
4class Cat:
def __init__(self, name):
self.name = name(问答)当我们根据一个类创建一个对象时,系统会自动帮助我们做哪些事
(问答)当我们希望能够在对象销毁前,让其能够为我们再做些事,可以使用什么方法
(问答)如果我们希望在打印一个对象时,能够让其输出一段自定义的内容,可以使用什么方法?并且定义时需要注意什么
(问答)开发语言中常说的封装是指什么
根据以下需求,创建指定的类
1
2
31. 小明体重:75kg
2. 小明每次跑步都会减肥:0.5kg
3. 小明每次吃饭体重增加:1kg(问答)身份运算符包括哪些,它和==运算符有何区别
(问答)在python中,对None类型的判断,建议使用什么的运算符
(问答)在一个类中,如果该类的某些属性、方法不希望被外界调用则可以使用私有化的方式,请问如何定义这类数据
(问答)如果一定要访问python中的私有属性、方法的方式是什么
根据如下需求,创建类:
1
2
3
41. 士兵许三多有一把ak47
2. 士兵可以开火
3. 枪能够发射子弹
4. 枪装填子弹 -- 增加子弹数量