跳到主要内容

Python 的魔法方法

Python中的魔法方法,也称为特殊方法或双下划线方法(dunder methods),是具有双下划线前缀和后缀的特殊命名方法。这些方法允许你自定义类的行为,以便与Python内置操作符和函数进行交互,从而使你的类更像Python内置类型。以下是一些常用的魔法方法及其用法示例:

__init__(self, ...)

初始化方法,用于创建类的实例并初始化其属性。

class MyClass:
def __init__(self, x):
self.x = x

obj = MyClass(10)

__str__(self)

返回对象的字符串表示形式。通常在使用 str(obj)print(obj) 时调用。

class MyClass:
def __init__(self, x):
self.x = x

def __str__(self):
return f"MyClass instance with x = {self.x}"

obj = MyClass(10)
print(obj) # 输出: MyClass instance with x = 10

__repr__(self)

返回对象的"官方"字符串表示形式,通常在使用 repr(obj) 时调用。

class MyClass:
def __init__(self, x):
self.x = x

def __repr__(self):
return f"MyClass({self.x})"

obj = MyClass(10)
print(repr(obj)) # 输出: MyClass(10)

__len__(self)

返回对象的长度,通常在使用 len(obj) 时调用。

class MyList:
def __init__(self, items):
self.items = items

def __len__(self):
return len(self.items)

my_list = MyList([1, 2, 3, 4])
print(len(my_list)) # 输出: 4

__getitem__(self, key)

获取对象的索引或键对应的值,通常在使用 obj[key] 时调用。

class MyDict:
def __init__(self, data):
self.data = data

def __getitem__(self, key):
return self.data.get(key, None)

my_dict = MyDict({"a": 1, "b": 2})
print(my_dict["a"]) # 输出: 1

__setitem__(self, key, value)

设置对象的索引或键对应的值,通常在使用 obj[key] = value 时调用。

class MyDict:
def __init__(self):
self.data = {}

def __setitem__(self, key, value):
self.data[key] = value

my_dict = MyDict()
my_dict["a"] = 1

__delitem__(self, key)

删除对象的索引或键对应的值,通常在使用 del obj[key] 时调用。

class MyDict:
def __init__(self, data):
self.data = data

def __delitem__(self, key):
del self.data[key]

my_dict = MyDict({"a": 1, "b": 2})
del my_dict["a"]

__iter__(self)

返回一个迭代器对象,通常在使用 iter(obj) 时调用。

class MyRange:
def __init__(self, start, end):
self.start = start
self.end = end

def __iter__(self):
return iter(range(self.start, self.end))

my_range = MyRange(1, 5)
for num in my_range:
print(num) # 输出: 1 2 3 4

这些是一些常见的魔法方法及其用法示例,它们允许你自定义类的行为,使你的类更加灵活和易于使用。你可以根据需要重写这些方法,以满足你的类的特定需求。