Python魔法之旅-魔法方法(14)
在Python中,魔法方法是那些具有特殊名称的方法,Python的内置方法会在特定的情况下自动调用这些方法。魔法方法允许我们改变对象的默认行为,例如定义加法、比较、迭代等操作。
以下是一些常见的Python魔法方法及其简单示例:
__init__
:构造器,当创建对象时调用。
class MyClass:
def __init__(self, value):
self.value = value
obj = MyClass(10)
__str__
:当使用print()
函数时被调用,应返回一个字符串。
class MyClass:
def __init__(self, value):
self.value = value
def __str__(self):
return f"MyClass with value: {self.value}"
obj = MyClass(10)
print(obj) # 输出: MyClass with value: 10
__repr__
:返回一个表达式字符串,使用该字符串可以重新得到对象。
class MyClass:
def __init__(self, value):
self.value = value
def __repr__(self):
return f"MyClass({self.value})"
obj = MyClass(10)
print(repr(obj)) # 输出: MyClass(10)
__add__
:定义加法的行为。
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
v1 = Vector(1, 2)
v2 = Vector(3, 4)
v3 = v1 + v2 # 调用 __add__ 方法
print(v3.x, v3.y) # 输出: 4 6
__iter__
:定义对象的迭代行为。
class Fibonacci:
def __init__(self, n):
self.a = 0
self.b = 1
self.n = n
def __iter__(self):
for i in range(self.n):
yield self.a
self.a, self.b = self.b, self.a + self.b
fib = Fibonacci(10)
for num in fib:
print(num, end=' ') # 输出: 0 1 1 2 3 5 8 13 21 34
__getitem__
:定义索引访问行为。
class MyList:
def __init__(self, *args):
self.items = [*args]
def __getitem__(self, key):
return self.items[key]
my_list = MyList(1, 2, 3)
print(my_list[1]) # 输出: 2
这些例子展示了如何在自定义类中重写这些魔法方法来改变对象的默认行为。实际开发中,可以根据需要实现相应的魔法方法来增强对象的功能。
评论已关闭