目录
[01. 类和对象的概念](#01. 类和对象的概念)
[1.1 类](#1.1 类)
[1.2 对象](#1.2 对象)
[02. 类和对象的关系](#02. 类和对象的关系)
[03. 类的设计](#03. 类的设计)
[3.1 类名的确定](#3.1 类名的确定)
[3.2 属性和方法的确定](#3.2 属性和方法的确定)
面向对象基础语法(内置函数,定义简单的类(只包含方法),方法中的self参数,初始化方法,内置方法和属性)
[01. 内置函数](#01. 内置函数)
[02. 定义简单的类(只包含方法)](#02. 定义简单的类(只包含方法))
[2.1 定义只包含方法的类](#2.1 定义只包含方法的类)
[2.2 创建对象](#2.2 创建对象)
[2.3 第一个面向对象程序](#2.3 第一个面向对象程序)
[03. 方法中的self参数](#03. 方法中的self参数)
[3.1 案例改造------给对象增加属性](#3.1 案例改造——给对象增加属性)
[3.2 使用self在方法内部输出每一只猫的名字](#3.2 使用self在方法内部输出每一只猫的名字)
[4.1 之前代码存在问题------在类的外部给对象增加属性](#4.1 之前代码存在问题——在类的外部给对象增加属性)
[4.2 初始化方法](#4.2 初始化方法)
[1. 为对象在内存中分配空间------创建对象](#1. 为对象在内存中分配空间——创建对象)
[2. 为对象的属性设置初始值------初始化方法(self)](#2. 为对象的属性设置初始值——初始化方法(self))
[4.3 在初始化方法内部定义属性](#4.3 在初始化方法内部定义属性)
[4.4 改造初始化方法------初始化的同时设置初始值](#4.4 改造初始化方法——初始化的同时设置初始值)
[5.1 __del__方法](#5.1 __del__方法)
[5.2 __str__方法](#5.2 __str__方法)
类和对象(类和对象的概念,类和对象的关系,类的设计)
01. 类和对象的概念
类和对象是面向对象编程的两个核心概念。
1.1 类
类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用。
特征被称为属性
行为被称为方法(敲黑板!在大学期末可能要考的哦,虽然实际上用不到)
类就相当于制造飞机时的图纸,是一个模板,是负责创建对象的。
1.2 对象
对象是由类创建出来的一个具体存在,可以直接使用
由哪一个类创建出来的对象,就拥有在哪一个类中定义的:属性和方法
对象就相当于用图纸制造的飞机。
02. 类和对象的关系
类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。
类只有一个,而对象可以有很多个
不同的对象之间属性可能会各不相同。
类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多,也不可能少。
03. 类的设计
在程序开发中,要设计一个类,通常要满足以下三个要素:
1.类名:这类事物的名字,满足大驼峰命名法
2.属性:这类事物具有什么特征
3.方法:这类食物具有什么样的行为
大驼峰命名法:每一个单词的首字母大写,单词与单词之间没有下划线。
例如:
3.1 类名的确定
名词提炼法分析整个业务流程,出现的名词,通常就是找到的类。
3.2 属性和方法的确定
对对象的特征描述,通常可以定义成属性。
对象具有的行为,通常可以定义为方法。
这里举个小小的例子:小明今年18岁,身高1.75,每天早上跑完步,会去吃东西
代码:
python
class Person:
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
def run_in_the_morning(self):
print(f"{self.name} 在早上跑步了。")
def eat_after_running(self):
print(f"{self.name} 跑完步后去吃东西了。")
# 创建一个Person对象,代表小明
xiaoming = Person("小明", 18, 1.75)
# 调用小明的方法
xiaoming.run_in_the_morning()
xiaoming.eat_after_running()
看不懂没关系,接着看看下面的文章吧。
面向对象基础语法(内置函数,定义简单的类(只包含方法),方法中的self参数,初始化方法,内置方法和属性)
01. 内置函数
02. 定义简单的类(只包含方法)
面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这次方法了!
2.1 定义只包含方法的类
在python中要定义一个只包含方法的类,语法格式如下:
方法的定义格式和之前学习过的函数几乎一样
区别在于第一个参数必须是self,大家暂时先记住,稍后介绍self
注意:类名的规则要符合大驼峰命名法
2.2 创建对象
当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:
2.3 第一个面向对象程序
需求:小猫爱吃鱼,小猫要喝水
分析:1.定义一个猫类Cat。 2.定义两个方法eat和drink。 3.按照需求------不需要定义属性
代码如下:
python
class Cat:
def eat(self):
print("小猫爱吃鱼")
def drink(self):
print("小猫要喝水")
# 创建一个Cat对象
tom = Cat()
# 调用eat方法
tom.eat()
# 调用drink方法
tom.drink()
补充:
03. 方法中的self参数
3.1 案例改造------给对象增加属性
在python中,给对象设置属性,非常的容易,但是不推荐使用,因为对象属性的封装应该封装在类的内部。
只需要在类的外部的代码中直接通过"."设置一个属性即可。
例如:
注意:这种方式虽然简单,但是不推荐使用。
3.2 使用self在方法内部输出每一只猫的名字
由哪一个对象调用的方法,方法内的self就是哪一个对象的引用
在类封装的方法内部,self就表示当前调用方法的对象自己
调用方法时,程序员不需要传递self参数
在方法内部:可以通过self访问对象的属性,也可以通过self调用其他的对象方法。
改造代码如下:
04.初始化方法
4.1 之前代码存在问题------在类的外部给对象增加属性
讲案例代码进行调整,先调用方法在设置属性,观察一下执行效果
程序执行报错如下:
提示:在日常开发中,不推荐在类的外部给对象增加属性
原因:如果在运行时,没有找到属性,程序会报错。
对象应该包含的所有属性,应该封装在类的内部
4.2 初始化方法
当使用类名()创建对象时,会自动执行操作:
1. 为对象在内存中分配空间------创建对象
2. 为对象的属性设置初始值------初始化方法(self)
这个初始化方法就是__init__方法,__init__是对象的内置方法。
在Cat中增加__init__方法,验证该方法在创建对象时会自动调用
代码如下:
4.3 在初始化方法内部定义属性
在__init__方法内部使用self.属性名 = 属性初始值 就可以定义属性。
定义属性之后,再使用Cat类创建的对象,都会拥有该属性。
例子如下:
4.4 改造初始化方法------初始化的同时设置初始值
在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对__init__方法进行改造
-
把希望设置的属性值,定义成__init__方法的参数
-
在方法内部使用self.属性 = 形参 接收外部传递的参数
-
在创建对象时,使用类名(属性1,属性2......)调用
例子如下:
05.内置方法和属性
5.1 __del__方法
在python中
当使用类名()创建对象时,为对象分配完空间后,自动调用__init__方法
当一个对象从内存中销毁前,会自动调用__del__方法
应用场景
__init__改造初始化方法,可以让创建对象更加灵活
__del__如果希望在对象被销毁的,再做一些事情,可以考虑一下__del__方法
生命周期
一个对象从调用类名()创建,生命周期开始
一个对象的__del__方法一旦被调用,生命周期结束
在对象的生命周期内,可以访问对象属性,或者让对象调用方法
5.2 __str__方法
在python中,使用print输出对象变量,默认情况下,会输出这个变量引用的对象是哪一个类创建的对象,以及在内存中地址(十六进制表示)
如果在开发中,希望使用print输出对象变量时,能够打印自定义的内容,就可以访问__str__这个内置方法了
例子如下:大家可以自己运行试试
注意:__str__方法必须返回一个字符串。
好啦!这是面向对象编程的第一期,往后还有六期,请大家关注我的后续博文。