当前位置: 代码迷 >> 综合 >> python基础(面向对象:类、对象、魔法方法)-----10(2020-09-29)
  详细解决方案

python基础(面向对象:类、对象、魔法方法)-----10(2020-09-29)

热度:42   发布时间:2023-10-09 23:28:50.0

一、概念知识

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:所有类的顶级类