希望所有温柔又可爱的人最后都能幸福❤
今日总结:
代码量 | 200行 |
---|---|
博客量 | 一篇 |
所学时间 | 4小时左右 |
了解到的知识点 | python面向对象基础 |
明日计划:
早上 | python面向对象封装 |
---|---|
下午 | python面向对象封装 |
晚上 | 无 |
具体内容:
面向对象(OPP)
过程和函数
- 过程是早期的一个编程概念
- 过程类似于函数,只能执行,但没有返回值
- 函数不仅能执行,还可以返回结果
面向过程的特点
- 注重步骤与过程,不注重职责分工
- 如果需求复杂,代码会变得很复杂
- 开发复杂项目,没有固定的套路,开发难度很大!
面向对象的特点
相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法
- 注重对象和职责,不同的对象承担不同的职责
- 更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路
- 需要在面向对象基础上,再学习一些面向对象的语法
类和对象
- 类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用
- 特征被称为属性
- 行为被称为方法
- 类就相当于制造飞机时的图纸,是一个模板,是负责创建对象的
对象
-
对象是由类创建出来的一个具体存在,可以直接使用
-
由哪一个类创建出来的对象,就拥有在哪一个类中定义的:
- 属性
- 方法
-
对象就相当于用图纸制造的飞机
在程序开发中,应该先有类,再有对象
- 类只有一个,而对象可以有很多个
- 不同的对象之间属性可能各不相同
在程序开发中,要设计一个类,通常需要满足以下三个要素:
- 类名这类事物的名字,满足大驼峰命名法
- 属性这类事物具有什么样的特征
- 方法这类事物具有什么样的行为
需求中没有涉及的属性或者方法在设计类时,不需要考虑
面向对象语法基础
在python
中对象无处不在,我们之前学的变量、数据、函数都是对象
使用内置函数dir
传入标识符/数据,可以查看对象内的所有属性及方法
- 定义一个猫类
Cat
- 定义两个方法
eat
和drink
- 按照需求--不需要定义属性
class Cat:
def eat(self):
print("小猫爱吃鱼")
def drink(self):
print("小猫爱喝水")
tom = Cat()
tom.drink()
tom.eat()
print(tom)
addr = id(tom)
print("%x" % addr)
引用
在面向对象开发中,引用的概念是同样适用的!
在python
中使用类创建对象之后,tom
变量中仍然记录的是对象在内存中的地址
在计算机中通常使用16进制表示内存地址
%d
可以以10进制输出数字%x
可以以16进制输出数字
使用同一个类创建出来的对象并不是同一个对象
class Cat:
def eat(self):
print("小猫爱吃鱼")
def drink(self):
print("小猫爱喝水")
tom = Cat()
tom.drink()
tom.eat()
lazy_cat = Cat()
lazy_cat.eat()
lazy_cat.drink()
lazy_cat2 = lazy_cat
print(tom)
print(lazy_cat)
print(lazy_cat2)
方法种的self
参数
-
self
是调用该方法的对象的引用- 使用
self.
来访问对象的属性 - 也可以通过
self.
来调用其他方法
- 使用
-
在日常开发中,不推荐在类的外部给对象增加属性
- 在运行时,如果没有找到该属性,程序会报错
-
对象应该包含哪些属性,应该封装在类的内部
初始化方法:_init_
,_init_
是对象的内置方法
_init_
方法是专门用来定义一个类具有哪些属性的方法!
使用类名创建对象时,会自动执行以下操作:
class Cat:
def __init__(self):
print("这是一个初始化方法")
tom = Cat()
初始化方法改造:
class Cat:
def __init__(self, new_name):
# print("这是一个初始化方法")
# self.name = "Tom"
self.name = new_name
def eat(self):
print("%s 爱吃鱼" % self.name)
tom = Cat("Tom")
print(tom.name)
lazy_cat = Cat("大懒猫")
lazy_cat.eat()
内置方法和属性
1._del_
方法
- 在
python
中,当一个对象从内存中销毁前,会自动调用_del_
方法
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 去了" % self.name)
# tom是全局变量
tom = Cat("Tom")
print(tom.name)
# del关键字可以删除一个对象
del tom
print("-" * 50)
一个对象的_del_
方法一旦被调用,生命周期结束