前言:
Python 中的魔术方法(Magic Methods),也称作特殊方法(Special Methods),是那些被双下划线包围的方法,例如 init。这些方法在 Python 中有特殊的含义,它们并不需要直接调用,而是在特定的情境下自动触发。通过定义或重写这些方法,可以自定义对象的行为,包括迭代、函数调用、属性访问等多种操作。
1.基本的魔术方法
1.1 有关属性
2 常见的几个魔术方法:
2.1 对象初始化:init(self[, …])
__init__我们很熟悉了,它在对象初始化的时候调用,我们一般将它理解为"构造函数"。这个方法在新建对象并进行初始化时被调用。
#!/usr/bin/env python
# coding=utf-8
"""
# @Time : 2024/4/7 8:25
# @Author : Summer
# @File : test.py
# @describe:
"""
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person('Alice', 30)
print(person.name) # Alice
2.1.1 new 和__init__的解释
new 方法
new 是一个静态方法(虽然通常不需要显式声明为 @staticmethod),它负责创建并返回一个新的实例。也就是说,在对象的创建过程中,new 方法会被首先调用。
new 方法的第一个参数是类本身(通常命名为 cls),该方法应该返回类的一个实例。
对于不可变类型,比如整型、字符串和元组等,修改实例是不可能的,所以这些类型通常都需要通过重写 new 方法来进行实例的创建。
init 方法
init 方法用于实例的初始化操作。当 new 方法创建一个实例并返回时,这个实例随即被传递给 init 方法的 self 参数,以执行初始化。
init 不应该返回任何值,它的返回值被忽略。
调用顺序:
首先,new 方法被调用创建实例。
然后,创建出的实例(即 new 的返回值)被传递给 init 方法的 self 参数。
最后,init 方法初始化实例。
#!/usr/bin/env python
# coding=utf-8
"""
# @Time : 2024/4/7 8:25
# @Author : Summer
# @File : test.py
# @describe:
"""
class MyClass(object):
def __new__(cls, *args, **kwargs):
print("Creating instance")
instance = super(MyClass, cls).__new__(cls)
return instance
def __init__(self, value):
print("Initializing instance")
self.value = value
# 创建 MyClass 的一个实例
obj = MyClass("Hello")
# Creating instance
# Initializing instance
在这个例子中,当尝试创建 MyClass 的一个实例时,首先调用