目录
一、面向对象基本概念
1、面向对象变成:Object Oriented Programming;简写:OOP。
2、在面向对象的世界里:
万事万物皆对象。
二、对比面向过程与面向对象
![](https://i-blog.csdnimg.cn/blog_migrate/a226384894052b252b2ed572ad1c1bb5.png)
三、面向对象的核心内容:类和对象
1、类的概念
-
是对具有 相同特征或者行为 的事物的一个统称;
-
类用于指代 一个或多个抽象的事物,不能直接使用。
-
代码中 类是由关键字 class定义的。
2、类包含的主要内容
-
特征(静态)->属性;
-
行为(动态)->方法;
3、对象的概念
-
代码中使用 类 去创建(实例化)对象;
-
对象用于指代 一个具体存在的事物,可以直接使用。
-
注意:由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法。
4、举例说明-类和对象
![](https://i-blog.csdnimg.cn/blog_migrate/b2b35645394bdaf4ee9d103cacf796dd.png)
四、类的构成
-
想要设计一个类,通常要包含 类名、属性、方法这三要素。
-
对于需求中,没有提到的属性和方法,在设计类的时候不要添加到类中!
五、类的设计
1、类名
-
多个事物,起一个名字。
-
类名的提取:使用名词提炼法,分析整个业务流程,得出的名词,通常就是类名。
-
命名规则:命名要见名知意,满足标识符规则, 大驼峰命名法(所有单词第一个字母大写, 单词之间没有下划线!)。
2、属性
-
同类事物具备的特征。
-
命名规则:全部小写字母,多个单词间用下划线“_”分隔。
3、方法
-
同类事物具备的行为。
-
命名规则:全部小写字母,多个单词间用下划线“_”分隔。
4、举例说明-设计类的三要素
![](https://i-blog.csdnimg.cn/blog_migrate/ca55799f783f55692db2cd11429461d8.png)
六、练习-设计类
1、需求
-
小明 今年 18岁,身高 1.75m,每天早上 跑 完步,会去 吃 东西;
-
小美 今年 17岁,身高 1.65m,每天早上不跑步,小美喜欢 吃 东西;
![](https://i-blog.csdnimg.cn/blog_migrate/e1dd2d6c2520228bec6f507c60d0b6ee.png)
2、需求
-
一只 黄颜色 的 狗狗 叫 大黄
-
看见生人 汪汪叫
-
看见家人 摇尾巴
![](https://i-blog.csdnimg.cn/blog_migrate/86c588b8208f9fabb9d55d125473f59a.png)
3、需求
-
进入某 Web 项目登录页面,输入用户名、密码、验证码之后,点击登录按钮可以登录系统。
![](https://i-blog.csdnimg.cn/blog_migrate/1b911287daba1a973391df626f1c4218.png)
4、需求
-
进入某APP项目的下订单页面,输入用户收货地址后,点击提交订单按钮,可以实现下单操作。
![](https://i-blog.csdnimg.cn/blog_migrate/d630745bc24d00a1e67dfdbb8af8a4e9.png)
七、类的基本使用
1、定义类
-
定义一个只包含方法的类,语法格式如下:
![](https://i-blog.csdnimg.cn/blog_migrate/90df5491fa8b108e7239431ca3d9d0b7.png)
2、创建对象(实例化对象)
-
使用定义好的类,创建对象,语法格式如下:
![](https://i-blog.csdnimg.cn/blog_migrate/5fbd3a158504b7e2b641a25039f19903.png)
-
温馨提示:不理解变量的引用,可跳转至文章 21 - 变量引用、局部变量、全局变量_ʕ·͡ˑ·ཻʔ❀❀ʕ·͡ˑ·ཻʔ李黏黏的博客-CSDN博客查阅。
3、调用类中的方法
-
由类创建的对象,可以调用类中的方法,语法格式如下:
![](https://i-blog.csdnimg.cn/blog_migrate/15acf1aa539e2756b0a5874d431f2ff8.png)
4、举例说明-类的基本使用
-
需求:
小猫 爱吃 鱼,小猫 要喝 水。
-
设计类:
![](https://i-blog.csdnimg.cn/blog_migrate/79ef9bf4047ab4de256803a95d6a11b5.png)
-
代码实现
# 创建一个猫类
class Cat:
def eat(self):
"""吃鱼的方法"""
print('小猫爱吃鱼...')
def drink(self):
"""喝水的方法"""
print('小猫爱喝水...')
# 创建对象
tom = Cat()
# 通过对象,调用cat类中的方法
tom.eat()
tom.drink()
![](https://i-blog.csdnimg.cn/blog_migrate/7034abb04e1c92767eb05ad75780d05b.png)
八、同一个类实例化出的两个对象,是同一个对象吗?
-
结论:同一个类实例化出的两个对象,不是同一个对象。
# 创建一个猫类
class Cat:
def eat(self):
"""吃鱼的方法"""
print('小猫爱吃鱼...')
def drink(self):
"""喝水的方法"""
print('小猫爱喝水...')
# 创建对象
tom = Cat()
# 通过对象,调用cat类中的方法
tom.eat()
tom.drink()
# 创建另一个对象
lazy = Cat()
lazy.eat()
lazy.drink()
# tom和lazy是同一个对象吗?
# 1.直接打印两个对象变量
print(tom)
print(lazy)
# 2.使用Python内置函数id(),查看两个对象的信息
# 使用“id(变量)” 函数 可以查看变量中 所保存对象 在内存中的存储地址。
print(f'tom的id是{id(tom)}')
print(f'lazy的id是{id(lazy)}')
![](https://i-blog.csdnimg.cn/blog_migrate/cf4259e60e7c05a388efc41f395efe7e.png)
九、self参数
1、self 就是调用这个方法的对象。
![](https://i-blog.csdnimg.cn/blog_migrate/2b73042e604a3a96a8fd75c9c9376ffc.png)
2、举例说明-self 就是调用这个方法的对象
# 创建一个猫类
class Cat:
"""爱吃鱼的方法"""
def love_eat_fish(self):
# self 是调用love_eat_fish()方法的对象
print(f"小猫姓名:{self.name},年龄:{self.age},爱吃鱼")
# 创建对象
tom = Cat()
# 给对象定义属性
# 姓名
tom.name = "李黏黏"
# 年龄
tom.age = 1
# 调用类中的 爱吃鱼方法
tom.love_eat_fish()
# 创建另一个对象
blue_cat = Cat()
# 给对象定义属性
# 姓名
blue_cat.name = "狗蛋儿"
# 年龄
blue_cat.age = 2
# 调用类中的 爱吃鱼方法
blue_cat.love_eat_fish()
![](https://i-blog.csdnimg.cn/blog_migrate/d4a82f8191689d34c86e256b9b2c1b82.png)
十、属性
1、对象中可以添加属性
-
属性 表示事物的特征。可以给对象添加属性,类中可以获取对象的属性值。
2、给对象添加属性语法
![](https://i-blog.csdnimg.cn/blog_migrate/1213165d970041cb034e2c667c846ecc.png)
3、获取对象的属性值
4、举例说明-访问对象属性
-
需求
-
Cat类 所实例化的对象添加属性:姓名、年龄;
-
eat方法中 打印输出 小猫 姓名xx,xx岁,爱吃鱼。
![](https://i-blog.csdnimg.cn/blog_migrate/f63b56dec87a5ad447240a19e51b275b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/70adf359addb5b3f4fec405e98d1f488.png)