一、概念知识
1.面向对象:就是将编程当成一个事物,对外界来说,事物是直接使用的,不用管他内部的情况。而编程就是设置事物能够做什么事情。
2.类:对一系列具有相同特征和行为的事物的统称,是一个抽象的概念,不是真实参在的事物。
3.特征即是属性,也就是变量。
4.行为即是方法,也就是函数。
5.类和对象的关系:用类去创建一个对象。
6.对象是类创建出来的真实存在的事物。
7.先有类,后有对象
二、语法
1.类的书写格式:
class 类名():? 代码? ······
()内填写要继承的类名
类名:大驼峰命名习惯,即就是:AppleName 英文单词首字母大写。
2.对象(实例)的书写格式:
对象名 = 类名()
()内填写参数
3.实例方法调用
对象名.方法名()
4.self:调用该函数的对象
三、使用场景
1.一个类创建多个对象
一个类创建多个对象,多个对象都调用函数,self地址不相同。
class Washer():def wash(self):print('洗衣服')print(self)
# 第二步:创建对象
#对象名 = 类名()
haier1 = Washer()
haier2 = Washer()# 第三步:验证结果
# 打印海尔对象
print(haier1)
print(haier2)
# 使用Wash功能
haier1.wash()
haier2.wash()
2.类外添加对象属性
属性:添加、获取的方法
2.1类外添加属性格式:
对象名.属性名 = 值
2.2类外获取对象属性
语法:对象名.属性名
# 添加对象属性:
haier1.width = 100
haier1.height = 80
# 获取对象属性
print(haier1.width)
2.3类里面获取对象属性的写法
语法:self.属性名
class Washer():def wash(self):print('洗衣服')print(self)# 获取属性def print_info(self):print(self.width)print(self.height)haier1.width = 100
haier1.height = 80
# 获取对象属性
haier1.print_info()
3.魔法方法:指具有特殊功能的函数
3.1 __ init__():初始化属性
class Washer():def __init__(self):self.width = 100self.height = 200def print_info(self):print(self.width)print(self.height)haier1 = Washer()
haier1.print_info()
带参数的init()方法:
class Washer():def __init__(self,width,height):self.height = heightself.width = widthdef print_info(self):print(self.width)print(self.height)haier1 = Washer(100,200)
haier1.print_info()
3.2 __ str() __方法的作用:打印对象时,输出为内存地址,此方法可避免打印无用的内存地址,而是返回此方法中return中的内容,一般都是一些解释说明的内容。
class Washer():def __init__(self,width,height):self.height = heightself.width = widthdef __str__(self):return '这是说明书'haier1 = Washer(100,200)
print(haier1)
#无此方法时,打印结果为内存地址,有此方法时,打印结果为return后的内容
3.3 __ del __():当删除对象时,解释器默认调用del方法
程序自上而下进行执行,当执行完后自动结束运行,内存进行删除类、变量等,内存自动删除释放,del方法自动被调用。
class Washer():def __init__(self):self.height = 300def __del__(self):print('对象被删除')haier1 = Washer()
#对象被删除
4.综合应用案例
4.1 烤地瓜
需求主线:
? 1.被考的时间和对应的状态:
? 0-3分钟:生的、
? 3-5分钟:半生不熟
? 5-8分钟:熟的
? 超过8分钟:烤糊了
? 2.添加的调料
? 用户可以按自己的意愿添加调料
class KaoDiGua():def __init__(self):self.kao_time = 0self.kao_statue = '生的'self.liao = []def Kao(self,time):self.kao_time += timeif 0 <= self.kao_time <3:self.kao_statue = '生的'elif 3 <= self.kao_time < 5:self.kao_statue = '半生不熟'elif 5 <= self.kao_time < 8:self.kao_statue = '熟的'elif self.kao_time >= 8:self.kao_statue = '烤糊了'def TiaoLiao(self,tl):self.tl = self.liao.append(tl)def __str__(self):return f'地瓜烤的时间有:{self.kao_time}分钟,地瓜的状态:{self.kao_statue},添加的调料有:{self.liao}'
digua1.Kao(3)
digua1.TiaoLiao('花生')
print(digua1)
#地瓜烤的时间有:3分钟,地瓜的状态:半生不熟,添加的调料有:['花生']
digua1.Kao(2)
digua1.TiaoLiao('花生')
print(digua1)
#地瓜烤的时间有:5分钟,地瓜的状态:熟的,添加的调料有:['花生', '胡椒面']
4.2 搬家具
需求主线:将小于房子剩余面积的家具摆放到房子中
步骤分析:
1.家具类:
实例属性:
? 家具名称
? 家具面积
2.房子类:
实例属性:
? 房子位置
? 房子面积
? 剩余房子面积
? 家具列表
实例方法:
? 搬家具:判断面积小于房子剩余面积,进行搬家具
class Furniture():def __init__(self,name,size):self.name = nameself.size = sizeclass Hose():def __init__(self,address,size):self.address = addressself.size = sizeself.free_size = sizeself.furniture = []def __str__(self):return f'房子位置在:{self.address},家具面积:{self.size},房子剩余面积:{self.free_size},家具列表有:{self.furniture}'def add_furniture(self,item):if self.free_size >= item.size:self.furniture.append(item.name)self.free_size -= item.sizeelse:print('家具太多,房屋剩余面积不足,无法容纳')f1 = Furniture('沙发',20)
h1= Hose('北京',100)
h1.add_furniture(f1)
print(h1)
#房子位置在:北京,家具面积:100,房子剩余面积:80,家具列表有:['沙发']
总结:拿到需求先进行分析,分析类–>类的属性–>属性的初始值–>定义方法,分析完整后在进行写代码,把大需求划分成多个子需求,进行实现。
四、拓展
经典类:python2.0,不由任意内置类型派生出来的类,称之为经典类。
语法:
class 类名:? 代码? ......
新式类:python3.0
语法:
class 类名(object):? 代码? ......
object:所有类的顶级类