Python 面向对象(魔术方法)

前言:因为上一篇面向对象涉及到的知识点太多了,所以这一篇将魔术方法单独拿出来,方便阅读

🥇魔术方法:

魔术方法的基本概念:

在 Python 里,魔术方法(Magic Methods)也被叫做特殊方法(Special Methods),它们是一类具有特殊命名规则的方法,名字以双下划线 __ 开头和结尾,例如 __init__、__str__ 等。这些方法在特定的场景下会被 Python 解释器自动调用,无需手动调用,能让开发者实现一些特殊的功能,极大增强了类的功能和灵活性。

init() 当实例化对象时,其会 自 动被触发(被调 用 )

del() 当手工 删除对象或对象被销毁时,其会 自 动被触发(被调 用 )

基本概念要点

  1. 命名规则:双下划线开头和结尾是魔术方法的显著标识,这一命名方式是 Python 的约定,用于区分普通方法。
  2. 自动调用:Python 解释器会在特定操作发生时自动调用相应的魔术方法,而非像普通方法那样需要手动调用。
  3. 增强类的功能:借助实现不同的魔术方法,能够让自定义类模拟内置类型的行为,或者实现特定的操作。

🥇**init()**方法(初始化方法或构造方法)

基本概念

__init__() 方法在创建类的实例时会被 Python 解释器自动调用,主要用于对实例对象进行初始化操作,即给实例对象的属性赋初始值。该方法定义在类的内部,其名称固定为 __init__,并且第一个参数必须是 self,它代表类的实例对象本身。

语法结构
python 复制代码
class ClassName:
    def __init__(self, parameter1, parameter2, ...):
        # 初始化操作
        self.attribute1 = parameter1
        self.attribute2 = parameter2
        ...
代码示例
python 复制代码
class Person:
    def __init__(self, name, age):
        # 将传入的 name 参数赋值给实例的 name 属性
        self.name = name
        # 将传入的 age 参数赋值给实例的 age 属性
        self.age = age

    def introduce(self):
        # 打印实例的 name 和 age 属性
        print(f"我叫 {self.name},今年 {self.age} 岁。")

# 创建 Person 类的实例,同时传入初始化参数
p1 = Person("Alice", 25)
# 调用实例的 introduce 方法
p1.introduce()

在上述代码中:

  1. 定义了一个 Person 类,其中包含 __init__ 方法和 introduce 方法。
  2. __init__ 方法接收两个参数 name 和 age,并将它们分别赋值给实例的 name 和 age 属性。
  3. 创建 Person 类的实例 p1 时,传入了 "Alice" 和 25 作为初始化参数,__init__ 方法会自动被调用,将这两个值赋给 p1 的 name 和 age 属性。
  4. 调用 p1 的 introduce 方法,打印出实例的 name 和 age 属性信息。
注意事项
  • self 参数 :__init__ 方法的第一个参数必须是 self,这是 Python 的规定。当创建实例时,Python 会自动将实例对象作为第一个参数传递给 __init__ 方法。
  • 可选参数 :__init__ 方法的参数可以是可选的,即可以为参数设置默认值。

🥇**str()**方法

基本概念

__str__() 方法是对象的字符串表示方法,当使用内置的 str() 函数将对象转换为字符串,或者使用 print() 函数打印对象时,Python 解释器会自动调用该对象的 __str__() 方法。如果类中没有定义 __str__() 方法,Python 会使用默认的字符串表示,通常是类名和对象的内存地址。

语法结构
python 复制代码
class ClassName:
    def __str__(self):
        # 返回对象的字符串表示
        return "对象的字符串描述"
代码示例
python 复制代码
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        # 返回对象的字符串表示
        return f"Point(x={self.x}, y={self.y})"

# 创建 Point 类的实例
p = Point(3, 4)

# 直接打印对象
print(p)  # 输出: Point(x=3, y=4)

在这个示例中,Point 类定义了 __str__() 方法,该方法返回一个格式化字符串,包含对象的 x 和 y 属性值。当使用 print() 函数打印 p 对象时,Python 解释器会自动调用 __str__() 方法,并将返回的字符串输出,这样的输出对用户来说更加直观和易读。

使用场景
  • 调试和日志记录:在调试代码或记录日志时,__str__() 方法可以提供对象的关键信息,方便开发者快速了解对象的状态。
  • 用户交互:当需要向用户展示对象的信息时,__str__() 方法可以返回一个友好的字符串,提升用户体验。

🥇**del()**方法(删除方法或析构方法)

基本概念

__del__() 方法会在对象的引用计数降为 0 且即将被垃圾回收机制销毁时自动调用。它的主要用途是在对象被销毁前执行一些清理工作,像关闭文件、释放网络连接、释放数据库连接等资源。

语法结构
python 复制代码
class ClassName:
    def __del__(self):
        # 执行清理操作的代码
        print("对象即将被销毁,执行清理操作")
示例代码
python 复制代码
class Person():
     # 构造函数__init__
     def __init__(self, name, age):
         self.name = name
         self.age = age
 
     # 析构⽅法__del__
     def __del__(self):
         print(f'{self}对象已经被删除')
# 实例化对象
p1 = Person('⽩⻣精', 100)
# 删除对象p1
del p1
注意事项

引用计数和垃圾回收机制

  • Python 使用引用计数来跟踪对象的引用情况,当对象的引用计数降为 0 时,对象就会被标记为可回收。不过,垃圾回收机制并不是实时运行的,所以 __del__ 方法的调用时机可能会有延迟。

总结:

init() :初始化方法或者称之为"构造函数",在对象初始化时执行,其主要作用就是在对象初 始化时,对对象进行初始化操作(如赋予属性)

str() :对象字符串方法,当我们在类的外部,使用print方法输出对象时被触发,其主要功就

是对对象进行打印输出操作,要求方法必须使用return返回字符串格式的数据。

del() :删除方法或者称之为"析构方法",在对象被删除时触发(调用del删除对象或文件执行 结束后),其主要作用就是适用于关闭文件、关闭数据库连接等等。

对于魔术方法就单独讲到这里,下一篇正式开讲面向对象的三大特征

相关推荐
Brilliantwxx2 小时前
【STM32】 __weak 弱引用、中断标志位、异常处理与 HAL_Delay 优先级
开发语言·stm32·单片机·嵌入式硬件
驭渊的小故事2 小时前
SpringBoot 配置文件详解:properties 与 yml 从入门到实战
java·开发语言·笔记
计算机源码社2 小时前
【27届大数据毕设】基于Spark的TikTok短视频属性分享与互动比率可视化分析系统 基于机器学习的TikTok短视频认证属性与互动效能关联分析
大数据·hadoop·python·机器学习·spark·毕业设计·课程设计
北冥有鱼被烹2 小时前
Linux timeout 命令完全指南:指定固定时间并发送固定信号
python
郝学胜-神的一滴2 小时前
游戏引擎原理与实践 02:揭开3A游戏背后的技术面纱
开发语言·计算机网络·程序人生·游戏·游戏引擎
SunnyDays10112 小时前
如何使用 Python 将 PowerPoint(PPT 或 PPTX)转换为 Markdown
python·ppt转markdown·pptx转markdown·powerpoint转md
PiaoKe___2 小时前
云手机原理与 Python 自动化实战:ADB、REST API、WebSocket 群控入门
python·智能手机·自动化
co_wait2 小时前
Python 迭代器(一)
python
m0_380743872 小时前
Qt实现调用相机进行拍照并进行图像处理
开发语言·c++
wangqiaowq2 小时前
AST 安全求值
java·开发语言