day14 课程(面向对象 & 类和对象 & 魔法方法init|str|del & 烤地瓜案例 & 家具案例)

课程:https://www.bilibili.com/video/BV1o4411M71o?spm_id_from=333.788.videopod.episodes&p=266

14.1 了解面向对象

14.1.1 目标

  理解面向对象

  类和对象

  添加和获取对象属性

  魔法方法

14.1.2 理解面向对象

面向对象是一种抽象化的编程思想,很多编程语言中都有的一种思想

例如:洗衣服

思考:几种途径可以完成洗衣服?

答:手洗和机洗

手洗:找盆 - 放水 - 加洗衣粉 - 浸泡 - 搓洗 - 拧干水 - 倒水 - 漂洗N次 - 拧干 - 晾晒

机洗:打开洗衣机 - 放衣服 - 加洗衣粉 - 按下开始按钮 - 晾晒

思考:对比两种洗衣服途径,发现了什么?

答:机洗更简单

思考:机洗,只需要找到一台洗衣机,加入简单操作就可以完成洗衣服的工作,而不需要关心洗衣机内部发生了什么事情

总结:面向对象就是将编程当成是一个事物,对外界来说,事物是直接使用的,不用去管他内部的情况,而编程就是设置事物能够做什么事

面向对象:创造洗衣机,用洗衣机做事情的过程

14.2 了解类和对象的关系

思考:洗衣机洗衣服描述过程中,洗衣机其实就是一个事物,即对象,洗衣机对象哪来的呢?

答:洗衣机是由工厂工人制造出来

思考:工厂工人怎么制造出的洗衣机?

答:工人根据设计师设计的功能图纸制作洗衣机

总结:图纸 -> 洗衣机 -> 洗衣服

在面向对象编程过程中,有两个重要组成部分:对象

类和对象的关系:用类去创建一个对象(也可以说 用类去实例化一个对象)

14.3 类和对象的语法

14.3.1 类

类是对一系列具有 相同特征 行为 的事物的统称,是一个抽象的概念,不是真实存在的事物

  特征即是属性(即变量)

  行为即是方法(即函数)

类比如是制造洗衣机时要用到的图纸,也就是说 类是用来创建对象

image

14.3.2 对象

对象是类创建出来的真实存在的事物,例如:洗衣机

注意:开发中,先有类,再有对象

14.3.3 体验定义类

Python2 中类分为:经典类 和 新式类

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

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

14.3.4 体验创建对象

对象又叫实例

# 语法
对象名 = 类名()

14.4 体验类和对象

# 需求: 洗衣机 功能:能洗衣服
# 1.定义洗衣机类
class Washer():
    def Wash(self):  # 类中函数 自动提示出 self
        print("能洗衣服")

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

# 3.验证类和对象是否创建成功
# 3.1 打印 haier 对象
print(haier)  # 对象所在的内存地址

# 3.2 使用 Wash 功能 -- 实例方法/对象方法
haier.Wash()  # 使用洗衣服功能

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day14\01.体验类和对象.py 
<__main__.Washer object at 0x0000018E2FAA67B0>
能洗衣服

Process finished with exit code 0

14.5 类里面的 self

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

# 类: 洗衣服 功能 洗衣服
class Washer():
    def Wash(self):  # 定义函数 自动出现 self
        print("洗衣服")
        print(self)  # 打印 self 看看 self 是什么

haier = Washer()

print(haier)  # 打印对象的内存地址
haier.Wash()  # 为了让 print(self) 执行, 调用对象

# 由于打印对象和打印 self 得到的内存地址相同, 所以 self 指的是调用该函数的对象, 运行中把 haier 对象地址传入函数中, self 得到 haier 对象地址

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe "D:\Pycharm\code\day14\02.类里面的 self.py" 
<__main__.Washer object at 0x000001BB184367B0>
洗衣服
<__main__.Washer object at 0x000001BB184367B0>

Process finished with exit code 0 

14.6 一个类创建多个对象

# 基于同一个类创建两个对象,对象的内存地址是不同的
class Washer():
    def Wash(self):
        print("洗衣服")
        print(self)  # 打印调用对象的地址

haier1 = Washer()  # 创建对象1
haier1.Wash()  # 对象1 内存地址 <__main__.Washer object at 0x000001F177A367B0>
print(haier1)

haier2 = Washer()  # 创建对象2
haier2.Wash()  # 对象2 内存地址 <__main__.Washer object at 0x000001F17818D090>
print(haier2)

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day14\03.一个类创建多个对象.py 
洗衣服
<__main__.Washer object at 0x00000250822767B0>
<__main__.Washer object at 0x00000250822767B0>
洗衣服
<__main__.Washer object at 0x0000025082BBD090>
<__main__.Washer object at 0x0000025082BBD090>

Process finished with exit code 0

14.7 类外面添加对象属性

属性即是特征,比如:洗衣机的宽度、高度、重量......

对象属性既可以在类外面添加和获取,也能在类里面添加和获取

14.7.1 语法

# 语法
对象名.属性名 = 值

14.7.2 体验

class Washer():
    def Wash(self):
        print("洗衣服")

haier1 = Washer()
# 添加属性
haier1.width = 500
haier1.height = 800

14.8 类外面获取对象属性

14.8.1 语法

# 语法
对象名.属性名

14.8.2 体验

class Washer():
    def Wash(self):
        print("洗衣服")

haier1 = Washer()
# 添加属性
haier1.width = 500
haier1.height = 800

# 获取属性
print(f"haier1 洗衣机的宽度是 {haier1.width}")  # 上面定义的 宽度属性
print(f"haier1 洗衣机的高度是 {haier1.height}")  # 上面定义的 高度属性

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day14\04.外面对象属性.py 
haier1 洗衣机的宽度是 500
haier1 洗衣机的高度是 800

Process finished with exit code 0 

14.9 类里面获取对象属性

14.9.1 语法

# 语法
self.属性名

14.9.2 体验

# 定义类
class Washer():
    def Wash(self):
        print("洗衣服")
        # 类里面获取实例属性
        print(f"洗衣机的宽度是 {self.width}")
        print(f"洗衣机的高度是 {self.height}")

# 创建对象
haier1 = Washer()
haier2 = Washer()

# 添加 haier1 属性
haier1.width = 500
haier1.height = 800
# 添加 haier2 属性
haier2.width = 10
haier2.height = 20

haier1.Wash()  # 不同对象, 可以添加不同属性
haier2.Wash()

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day14\05.里面对象属性.py 
洗衣服
洗衣机的宽度是 500
洗衣机的高度是 800
洗衣服
洗衣机的宽度是 10
洗衣机的高度是 20

Process finished with exit code 0

14.10 体验魔法方法 int

在 Python 中, __xx__() 的函数叫做魔法方法,指的是具有特殊功能的函数

思考:洗衣机的宽度高度是与生俱来的属性,可不可以在生产过程中就赋予这些属性呢?

答:理应如此  __init()__ 方法的作用:初始化对象

# 定义类
class Washer():
    def __init__(self):  # 魔法方法
        self.width = 500  # 魔法方法中定义实例属性
        self.height = 800  # 魔法方法中定义实例属性

    def Wash(self):
        print("洗衣服")
        # 类里面获取魔法方法中的实例属性
        print(f"洗衣机的宽度是 {self.width}")
        print(f"洗衣机的高度是 {self.height}")

haier1 = Washer()
haier1.Wash()  # 魔法方法设置、调用、传递成功

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe "D:\Pycharm\code\day14\06.体验魔法方法 int.py" 
洗衣服
洗衣机的宽度是 500
洗衣机的高度是 800

Process finished with exit code 0

注意:

  1.__init() 方法:在创建一个对象时默认被调用,不需要手动调用

  2.__init__(self) 中的 self 参数,不需要开发者传递,python 解释器会自动把当前的对象引用传递过去

14.11 带参数的init代码书写(替换原11和12)

思考:一个类可以创建多个对象,如何对不同的对象设置不同的初始化属性呢?

答:传参数

# 定义类
class Washer():
    def __init__(self, width, height):  # 魔法方法函数中设置形参
        self.width = width  # 传参
        self.height = height  # 传参

    def Wash(self):
        print("洗衣服")
        # 类里面获取魔法方法中的传参的属性
        print(f"洗衣机的宽度是 {self.width}")
        print(f"洗衣机的高度是 {self.height}")

haier1 = Washer(10, 20)  # 创建时自动调用 init, 因此传入参数, 实参会变成 self.width 等数据
haier1.Wash()

haier2 = Washer(500, 800)
haier2.Wash()

# 当不传入参数时报错
# haier3 = Washer()  # 报错没有传参:TypeError: Washer.__init__() missing 2 required positional arguments: 'width' and 'height'
# haier3.Wash()

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day14\07.带参数的init代码.py 
洗衣服
洗衣机的宽度是 10
洗衣机的高度是 20
洗衣服
洗衣机的宽度是 500
洗衣机的高度是 800

Process finished with exit code 0

14.12 魔法方法str

当使用 print 输出对象的时候,默认打印对象的内存地址,如果类定义了 __str__ 方法,那么就会打印存在这个方法中 return 的数据(打印内存地址对于用户和其他程序员作用不大,返回解释说明的文字更好)

class Washer1():
    def __init__(self):  # init 魔法方法
        width = 200

class Washer2():
    def __init__(self):  # init 魔法方法
            width = 200
    def __str__(self):  # str 魔法方法, 有返回值
        return "解释说明:'类的说明或对象状态的说明'"


haier1 = Washer1()
print(haier1)  # 无 str 魔法方法, 返回对象的内存地址 <__main__.Washer1 object at 0x00000218B56A67B0>

haier2 = Washer2()
print(haier2)  # 有 str 魔法方法, 返回 return 值   解释说明:'类的说明或对象状态的说明'

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day14\08.魔法方法str.py 
<__main__.Washer1 object at 0x00000218B56A67B0>
解释说明:'类的说明或对象状态的说明'

Process finished with exit code 0

14.13 魔法方法del

当删除对象时,python 解释器也会默认调用 __del__() 方法

class Washer():
    def __init__(self):
        self.width = 200
        print("对象自动创建")

    def __del__(self):
        print("对象已经删除")

haier = Washer()  # 基于类创建对象的时候, 对象初始自动调用 init, 对象结束自动调用 del

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day14\09.魔法方法del.py 
对象自动创建
对象已经删除

Process finished with exit code 0

14.14 了解烤地瓜案例需求

需求主线:

  1.被烤的时间和对应的地瓜状态:

    0-3 分钟:生的

    3-5 分钟:半生不熟

    5-8 分钟:熟的

    超过 8 分钟:烤糊了

  2.添加的调料:

    用户可以按自己的意愿添加调料

14.15 烤地瓜案例步骤分析

1.地瓜的属性:

  (1)被烤的时间

  (2)地瓜的状态

  (3)添加的调料

2.地瓜的方法:

  (1):被烤

    用户根据意愿设定每次烤地瓜的时间

    判断地瓜被烤的总时间是在哪个区间,修改地瓜状态

  (2):添加调料

       用户根据意愿设定添加的调料

    将用户添加的调料存储

3.显示对象信息

14.16 烤地瓜init方法

# 1.定义类:初始化属性、被烤和添加调料的方法、显示对象信息的 str
class SweetPotato:
    def __init__(self):
        self.cook_time = 0  # 初始化时间
        self.cook_state = "生的"  # 初始化状态, 以后随着被烤时间的变化, 状态也要发生变化
        self.coodiments = []  # 初始化调料 调料使用列表, 因为调料可以放很多种

14.17 烤地瓜方法cook

# 1.定义类:初始化属性、被烤和添加调料的方法、显示对象信息的 str
class SweetPotato:
    def __init__(self):  # 1.1 初始化属性
        self.cook_time = 0  # 初始化时间
        self.cook_state = "生的"  # 初始化状态, 以后随着被烤时间的变化, 状态也要发生变化
        self.coodiments = []  # 初始化调料 调料使用列表, 因为调料可以放很多种

    def Cook(self, time):  # 1.2 被烤的方法
        """ 烤地瓜的方法 """  # 函数说明文档
        self.cook_time += time  # 隔三差五抽出来看一下, 但里面烤地瓜的时间是要累计的
        if 0 <= self.cook_time < 3:
            self.cook_state = "生的"
        elif 3 <= self.cook_time < 5:
            self.cook_state = "半生不熟"
        elif 5 <= self.cook_time < 8:
            self.cook_state = "熟的"
        elif 8 <= self.cook_time:
            self.cook_state = "烤糊了"

14.18 烤地瓜案例魔法方法str

# 1.定义类:初始化属性、被烤和添加调料的方法、显示对象信息的 str
class SweetPotato:
    def __init__(self):  # 1.1 初始化属性
        self.cook_time = 0  # 初始化时间
        self.cook_state = "生的"  # 初始化状态, 以后随着被烤时间的变化, 状态也要发生变化
        self.coodiments = []  # 初始化调料 调料使用列表, 因为调料可以放很多种

    def Cook(self, time):  # 1.2 被烤的方法
        """ 烤地瓜的方法 """  # 函数说明文档
        self.cook_time += time  # 隔三差五抽出来看一下, 但里面烤地瓜的时间是要累计的
        if 0 <= self.cook_time < 3:
            self.cook_state = "生的"
        elif 3 <= self.cook_time < 5:
            self.cook_state = "半生不熟"
        elif 5 <= self.cook_time < 8:
            self.cook_state = "熟的"
        elif 8 <= self.cook_time:
            self.cook_state = "烤糊了"

    def __str__(self):  # 1.3 显示对象信息的 str
        return f"这个地瓜烤了{self.cook_time} 目前状态是 {self.cook_state}"

14.19 创建对象测试属性和方法

# 1.定义类:初始化属性、被烤和添加调料的方法、显示对象信息的 str
class SweetPotato:
    def __init__(self):  # 1.1 初始化属性
        self.cook_time = 0  # 初始化时间
        self.cook_state = "生的"  # 初始化状态, 以后随着被烤时间的变化, 状态也要发生变化
        self.coodiments = []  # 初始化调料 调料使用列表, 因为调料可以放很多种

    def Cook(self, time):  # 1.2 被烤的方法
        """ 烤地瓜的方法 """  # 函数说明文档
        self.cook_time += time  # 隔三差五抽出来看一下, 但里面烤地瓜的时间是要累计的
        if 0 <= self.cook_time < 3:
            self.cook_state = "生的"
        elif 3 <= self.cook_time < 5:
            self.cook_state = "半生不熟"
        elif 5 <= self.cook_time < 8:
            self.cook_state = "熟的"
        elif 8 <= self.cook_time:
            self.cook_state = "烤糊了"

    def __str__(self):  # 1.3 显示对象信息的 str
        return f"这个地瓜烤了 {self.cook_time} 分钟,目前状态是 {self.cook_state}"

# 2.创建对象并调用对应的实例方法
digua1 = SweetPotato()
print(digua1)  # 魔法方法 str 返回的时间属性和状态属性是默认的, 是初始时间和状态是 init
digua1.Cook(2)  # 使用对象中的 cook 方法, 相应状态会发生改变
print(digua1)
digua1.Cook(2)
print(digua1)
digua1.Cook(2)
print(digua1)
digua1.Cook(2)
print(digua1)

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day14\10.烤地瓜案例.py 
这个地瓜烤了 0 分钟,目前状态是 生的
这个地瓜烤了 2 分钟,目前状态是 生的
这个地瓜烤了 4 分钟,目前状态是 半生不熟
这个地瓜烤了 6 分钟,目前状态是 熟的
这个地瓜烤了 8 分钟,目前状态是 烤糊了

Process finished with exit code 0

14.20 烤地瓜添加调料

# 1.定义类:初始化属性、被烤和添加调料的方法、显示对象信息的 str
class SweetPotato:
    def __init__(self):  # 1.1 初始化属性
        self.cook_time = 0  # 初始化时间
        self.cook_state = "生的"  # 初始化状态, 以后随着被烤时间的变化, 状态也要发生变化
        self.coodiments = []  # 初始化调料 调料使用列表, 因为调料可以放很多种

    def Cook(self, time):  # 1.2 被烤的方法
        """ 烤地瓜的方法 """  # 函数说明文档
        self.cook_time += time  # 隔三差五抽出来看一下, 但里面烤地瓜的时间是要累计的
        if 0 <= self.cook_time < 3:
            self.cook_state = "生的"
        elif 3 <= self.cook_time < 5:
            self.cook_state = "半生不熟"
        elif 5 <= self.cook_time < 8:
            self.cook_state = "熟的"
        elif 8 <= self.cook_time:
            self.cook_state = "烤糊了"

    def Coodiments(self, coodiment):
        """ 添加调料 """  # 函数说明文档
        self.coodiments.append(coodiment)  # 用户添加调料, 可以添加多种

    def __str__(self):  # 1.3 显示对象信息的 str
        return f"这个地瓜烤了 {self.cook_time} 分钟,目前状态是 {self.cook_state}, 添加的调料有 {self.coodiments}"

# 2.创建对象并调用对应的实例方法
digua1 = SweetPotato()
print(digua1)  # 魔法方法 str 返回的时间属性和状态属性是默认的, 是初始时间和状态是 init
digua1.Cook(4)  # 使用对象中的 cook 方法, 相应状态会发生改变
print(digua1)
digua1.Coodiments("辣椒")
print(digua1)
digua1.Cook(4)  # 因为程序运行中, 内存是没释放的,所以内存中列表内的值一直存在会添加列表数据
print(digua1)
digua1.Coodiments("酱油")
print(digua1)

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day14\10.烤地瓜案例.py 
这个地瓜烤了 0 分钟,目前状态是 生的, 添加的调料有 []
这个地瓜烤了 4 分钟,目前状态是 半生不熟, 添加的调料有 []
这个地瓜烤了 4 分钟,目前状态是 半生不熟, 添加的调料有 ['辣椒']
这个地瓜烤了 8 分钟,目前状态是 烤糊了, 添加的调料有 ['辣椒']
这个地瓜烤了 8 分钟,目前状态是 烤糊了, 添加的调料有 ['辣椒', '酱油']

Process finished with exit code 0

14.21 搬家具需求和步骤分析

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

步骤分析:需求涉及两个事物:房子 和 家具,故此案例涉及两个类:房子类 和 家具类

1.房子类:

  (1)实例属性:

    a.房子地理位置

    b.房子占地面积

    c.房子剩余面积

    d.房子内家具列表

  (2)实例方法:

    a.容纳家具

  (3)显示房屋信息

2.家具类:

  (1)家具名称

  (2)家具占地面积

14.22 搬家具之家具类

# 家具类
class Furniture():
    def __init__(self, name, area):  # 使用传参的方式, 可以不固定家具的名称、占地面积
        self.name = name  # 家具名称
        self.area = area  # 家具占地面积

bed = Furniture("双人床", 6)
sofa = Furniture("沙发", 10)

14.23 搬家具之房屋类

# 家具类
class Furniture():
    def __init__(self, name, area):  # 使用传参的方式, 可以不固定家具的名称、占地面积
        self.name = name  # 家具名称
        self.area = area  # 家具占地面积

# 房屋类
class Home():
    def __init__(self, address, area):
        self.address = address  # 房屋地理位置
        self.area = area  # 房屋面积
        self.free_area = area  # 房屋剩余面积,没搬入家具,房屋剩余面积为房屋面积
        self.furniture = []  # 家具列表,没搬入家具,家具列表为空

    def __str__(self):
        return f"房子坐落于 {self.address},占地面积 {self.area}, 剩余面积 {self.free_area},家具有 {self.furniture}"

# 家具对象
bed = Furniture("双人床", 6)
sofa = Furniture("沙发", 10)

# 房屋对象
home1 = Home("北京", 1000)
print(home1)

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day14\11.搬家具案例.py 
房子坐落于 北京,占地面积 1000, 剩余面积 1000,家具有 []

Process finished with exit code 0

14.24 搬家具之添加容纳家具思路分析

class 
........
    def add_furniture(self, item):  # 一个 item 形参,需要用到两个参数 家具名称和家具面积
........

这里一个 item 是一个形参,为什么会笃定里面有两个参数呢?

答:房屋对象使用 add_furniture方法 使用的是引用,引用家具类的对象,而家具类的对象里面定义了两个属性,即:name、area ,所以是房屋对应使用引用,引用中有两个值

14.25 搬家具之容纳家具函数

# 家具类
class Furniture():
    def __init__(self, name, area):  # 使用传参的方式, 可以不固定家具的名称、占地面积
        self.name = name  # 家具名称
        self.area = area  # 家具占地面积

# 房屋类
class Home():
    def __init__(self, address, area):
        self.address = address  # 房屋地理位置
        self.area = area  # 房屋面积
        self.free_area = area  # 房屋剩余面积,没搬入家具,房屋剩余面积为房屋面积
        self.furniture = []  # 家具列表,没搬入家具,家具列表为空

    def __str__(self):
        return f"房子坐落于 {self.address},占地面积 {self.area}, 剩余面积 {self.free_area},家具有 {self.furniture}"

    def add_furniture(self, item):  # 一个 item 形参,需要用到两个参数 家具名称和家具面积
        """ 容纳家具 """
        if self.free_area > item.area:  # 判断房屋剩余面积大于家具面积,再装入
            self.furniture.append(item.name)  # 可以装入, 加入到家具列表
            self.free_area -= item.area  # 房屋剩余面积减去装入家具面积
        else:
            print(f"{item.name} 家具太大, 剩余面积 {self.free_area} 不足,无法容纳")  # 为什么这里不使用 return, 因为 return 直接结束, 不会再调用魔法方法 __str__

# 家具对象
bed = Furniture("双人床", 6)
sofa = Furniture("沙发", 10)

# 房屋对象
home1 = Home("北京", 1000)
print(home1)
home1.add_furniture(sofa)  # 将 sofa 传入房屋对象, sofa 这里是引用 sofa对象
print(home1)
home1.add_furniture(bed)
print(home1)

card = Furniture("篮球场", 2000)  # 使用家具对象创建不能搬入的情况
home1.add_furniture(card)  # 加入房屋对象
print(home1)  # 这里就是 else print 的好处, 打印 提示信息, 还会返回 return 信息,如果将 print 改为 return, str 里面的 return 将不会提示

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day14\11.搬家具案例.py 
房子坐落于 北京,占地面积 1000, 剩余面积 1000,家具有 []
房子坐落于 北京,占地面积 1000, 剩余面积 990,家具有 ['沙发']
房子坐落于 北京,占地面积 1000, 剩余面积 984,家具有 ['沙发', '双人床']
篮球场 家具太大, 剩余面积 984 不足,无法容纳
房子坐落于 北京,占地面积 1000, 剩余面积 984,家具有 ['沙发', '双人床']

Process finished with exit code 0

14.26 面向对象基础部分总结

1.面向对象重要组成部分

  (1)类

    创建类

class 类名():
    代码
    ......

  (2)对象

对象名 = 类名()

2.添加对象属性

  (1)类外面

对象名.属性名 = 值

  (2)类里面

self.属性名 = 值

3.获取对象属性

  (1)类外面

对象名.属性名

  (2)类里面

self.属性名

4.魔法方法:即特殊功能的函数,以类创建对象时各阶段自动调用

  (1)__init__:初始化

  (2)__str__:输出对象信息

  (3)__del__:删除对象时调用

———————————————————————————————————————————————————————————————————————————

                                                                                                                         无敌小马爱学习

posted on 2025-09-29 22:57  马俊南  阅读(6)  评论(0)    收藏  举报