Python学习笔记(十八)面向对象基础

Python学习笔记(十八)面向对象基础

一、理解面向对象

在这里插入图片描述

二、类和对象

在这里插入图片描述
类和对象的关系:用类去创建一个对象,或者说,用雷去实例化一个对象。

2.1 理解类和对象

2.1.1 类
在这里插入图片描述
2.1.2 对象
在这里插入图片描述

2.2 面向对象的实现方法

2.2.1 定义类

  • 语法:
class 类名():
    代码
    ......

注意:类名要满足标识符命名规则,同时遵循大驼峰命名习惯

  • 体验

2.2.2 创建对象

对象名又名实例。

语法:

对象名 = 类名()
# 需求: 洗衣机 功能:洗衣服
# 1. 定义洗衣机类
'''
class 变量名():
    代码
    ...
'''

class Washer():
    def wash(self):
        print('洗好衣服了')

# 2. 创建对象
# 对象名 = 类名()
haier = Washer()

# 3. 验证成果
# 打印haier对象
print(haier)

# 使用wash功能 -- 实例方法/对象方法 -- 对象名.wash()
haier.wash()

在这里插入图片描述
2.2.3 self

self 指的是调用该函数的对象。

# 由于打印对象和打印self的内存地址相同,所以self指的是调用该函数的对象
class Washer():
    def wash(self):
        print('洗衣服')
        print(self)
haier = Washer()
print(haier)
haier.wash()

在这里插入图片描述
一个类可以创建多个对象,且创建的两个对象内存地址不同。

# 1. 一个类是否可以创建多个对象(可以)  2. 多个对象都调用函数的时候,self地址是否相同(不相同)
class Washer():
    def wash(self):
        print('洗衣服')
        print(self)

haier1 = Washer()
haier1.wash()

haier2 = Washer()
haier2.wash()

结果截图:
在这里插入图片描述

三、添加和获取对象属性

属性即是特征,比如:洗衣机的宽度、高度、重量。
对象属性既可以在类外面添加和获取,也可以在类里面添加和获取。

3.1 类外面添加对象属性
  • 语法
对象名.属性名 =
  • 体验
haier1.width = 500
haier1.height = 800
3.2 类外面获取对象属性
  • 语法
对象名.属性名
  • 体验
print(f'海尔洗衣机的宽度为:{haier1.width}')  #海尔洗衣机的宽度为:500
print(f'海尔洗衣机的高度为:{haier1.height}')  #海尔洗衣机的高度为:800
3.3 类里面获取对象属性
  • 语法
self.属性名
  • 体验
class Washer():
    def print_info(self):
        # 类里面获取实例属性
        print(f'海尔洗衣机的宽度为:{self.width}')  # 海尔洗衣机的宽度为:500
        print(f'海尔洗衣机的高度为:{self.height}')  # 海尔洗衣机的高度为:800
# 创建对象
haier1 = Washer()

# 添加实例属性
haier1.width = 500
haier1.height = 800

haier1.print_info()

结果截图:
在这里插入图片描述

四、魔法方法

在python中,有一些内置好的特定的方法,这些方法在进行特定的操作时会自动被调用,称之为魔法方法。xx() 的函数叫做魔法方法,指的是具有特殊功能的函数。

在这里插入图片描述

4.1.1 体验

在这里插入图片描述

class Washer():
    def __init__(self):
        self.width = 500
        self.height = 800
    def print_info(self):
        print(f'洗衣机宽度为:{self.width}')
        print(f'洗衣机高度为:{self.height}')

haier = Washer()
haier.print_info()

结果截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思考:一个类可以创建多个对象,如何对不同的对象设置不同的初始化属性呢?

答:传参数
class Washer():
    def __init__(self,width,height):
        self.width = width
        self.height = height
    def print_info(self):
        print(f'洗衣机的宽度为{self.width},高度为{self.height}')


haier1 = Washer(10,20)
haier1.print_info()

haier2 = Washer(100,200)
haier2.print_info()

在这里插入图片描述
在这里插入图片描述

class Washer():
    def __init__(self,width,height):
        self.width = width
        self.height = height
    def __str__(self):
        return '这是海尔洗衣机的说明书'


haier1 = Washer(10,20)
print(haier1)  # 这是海尔洗衣机的说明书

在这里插入图片描述

class Washer():
    def __init__(self,width,height):
        self.width = width
        self.height = height
    def __del__(self):
        print(f'对象已经删除')


haier1 = Washer(10,20)  # 对象已经删除

五、综合应用

5.1 烤地瓜

5.1.1 需求
在这里插入图片描述
在这里插入图片描述
5.1.3 代码

# 1. 定义类:初始化属性、被烤和添加调料的方法,显示对象信息的str
class SweetPatato():

    def __init__(self):
        # 被烤的时间
        self.cook_time = 0
        # 被烤的状态
        self.cook_static = '生的'
        # 调料列表
        self.condiments = []

    def cook(self,time):
        '''烤地瓜方法'''
        self.cook_time += time
        if 0 <= self.cook_time < 3:
            self.cook_static = '生的'
        elif 3 <= self.cook_time < 5:
            self.cook_static = '半生不熟'
        elif 5 <= self.cook_time <8:
            self.cook_static = '熟了'
        elif self.cook_time >= 8:
            self.cook_static = '烤糊了'

    def add_condiments(self,condiment):
        '''添加调料方法'''
        self.condiments.append(condiment)

    def __str__(self):
        return  f'这个地瓜烤了{self.cook_time}分钟,状态是{self.cook_static},添加的调料有{self.condiments}。'

# 2. 创建对象并调用对应的对象方法
digua1 = SweetPatato()
print(digua1)

# 先烤两分钟,并添加调料
digua1.cook(2)
digua1.add_condiments('糖')
print(digua1)

# 再烤两分钟,并添加调料
digua1.cook(2)
digua1.add_condiments('酱油')
print(digua1)

# 最后再烤两分钟
digua1.cook(2)
print(digua1)
5.2 搬家具
5.2.1 需求:

将小于房子剩余面积的家具摆放到房子中

5.2.2 步骤分析:

需求涉及两个事物: 房子 和 家具, 故案例涉及 两个类: 房子类 和 家具类。
在这里插入图片描述

5.2.3 代码实现
# 定义家具类
class Funiture():
    def __init__(self,name,area):
        self.name = name
        self.area = area
    def __str__(self):
        return f'该家具是{self.name},占地面积为{self.area}。'

# 定义房子类
class House():
    def __init__(self,address,area):
        # 地理位置
        self.address = address
        # 房屋面积
        self.area = area
        # 剩余面积
        self.rest_area = area
        # 家具列表
        self.furniture = []

    def add_funiture(self,item):
        '''搬家具'''
        if self.rest_area >= item.area:
            self.furniture.append(item.name)
            self.rest_area -= item.area
        else:
            print('家具太大,房屋剩余面积不足,无法容纳')

    def __str__(self):
        return f'房子地理位置在{self.address},房屋面积为{self.area}平,剩余面积为{self.rest_area}平,家具列表为{self.furniture}'

# 创建房子对象
house1 = House('北京',120)
print(house1)

# 创建双人床家具,并添加至房子对象中
bed = Funiture('双人床',20)
print(bed)
house1.add_funiture(bed)
print(house1)

# 创建沙发家具,并添加至房子对象中
sofa = Funiture('沙发',10)
print(sofa)
house1.add_funiture(sofa)
print(house1)

六、总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值