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__ 方法接收两个参数 nameage,并将它们分别赋值给实例的 nameage 属性。
  3. 创建 Person 类的实例 p1 时,传入了 "Alice"25 作为初始化参数,__init__ 方法会自动被调用,将这两个值赋给 p1nameage 属性。
  4. 调用 p1introduce 方法,打印出实例的 nameage 属性信息。
注意事项
  • 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__() 方法,该方法返回一个格式化字符串,包含对象的 xy 属性值。当使用 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删除对象或文件执行 结束后),其主要作用就是适用于关闭文件、关闭数据库连接等等。

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

相关推荐
鸡鸭扣32 分钟前
Docker:3、在VSCode上安装并运行python程序或JavaScript程序
运维·vscode·python·docker·容器·js
paterWang1 小时前
基于 Python 和 OpenCV 的酒店客房入侵检测系统设计与实现
开发语言·python·opencv
东方佑1 小时前
使用Python和OpenCV实现图像像素压缩与解压
开发语言·python·opencv
我真不会起名字啊2 小时前
“深入浅出”系列之杂谈篇:(3)Qt5和Qt6该学哪个?
开发语言·qt
神秘_博士2 小时前
自制AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有iPhone
arm开发·python·物联网·flutter·docker·gitee
laimaxgg2 小时前
Qt常用控件之单选按钮QRadioButton
开发语言·c++·qt·ui·qt5
水瓶丫头站住2 小时前
Qt的QStackedWidget样式设置
开发语言·qt
Moutai码农3 小时前
机器学习-生命周期
人工智能·python·机器学习·数据挖掘
小钊(求职中)3 小时前
Java开发实习面试笔试题(含答案)
java·开发语言·spring boot·spring·面试·tomcat·maven
小白教程4 小时前
python学习笔记,python处理 Excel、Word、PPT 以及邮件自动化办公
python·python学习·python安装