__init__ - 对象构造器
在创建类的新实例时自动调用,用于初始化对象属性。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 创建实例
p = Person("Alice", 30)
print(p.name) # 输出: Alice
深入探索Python魔术方法的核心原理与实际应用
在Python中,双下划线方法(也称为"魔术方法"或"特殊方法")是以双下划线开头和结尾的方法(例如__init__、__str__)。它们允许类定义自己的行为,以便与Python内置操作符和函数无缝集成。
在创建类的新实例时自动调用,用于初始化对象属性。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 创建实例
p = Person("Alice", 30)
print(p.name) # 输出: Alice
__str__:定义对象的"非正式"字符串表示,用于print()函数
__repr__:定义对象的"正式"字符串表示,用于调试和开发
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"Point({self.x}, {self.y})"
def __repr__(self):
return f"Point(x={self.x}, y={self.y})"
p = Point(3, 4)
print(str(p)) # 输出: Point(3, 4)
print(repr(p)) # 输出: Point(x=3, y=4)
允许对象响应内置的len()函数,返回容器中元素的数量。
class Playlist:
def __init__(self, songs):
self.songs = songs
def __len__(self):
return len(self.songs)
playlist = Playlist(["Song1", "Song2", "Song3"])
print(len(playlist)) # 输出: 3
使对象支持索引操作,如obj[index]和obj[index] = value。
class MyList:
def __init__(self, items):
self.items = items
def __getitem__(self, index):
return self.items[index]
def __setitem__(self, index, value):
self.items[index] = value
my_list = MyList([10, 20, 30])
print(my_list[1]) # 输出: 20
my_list[1] = 25
print(my_list[1]) # 输出: 25
使对象可以被迭代(例如在for循环中使用)。
class Countdown:
def __init__(self, start):
self.start = start
def __iter__(self):
self.current = self.start
return self
def __next__(self):
if self.current <= 0:
raise StopIteration
else:
self.current -= 1
return self.current + 1
# 使用迭代
for num in Countdown(5):
print(num, end=" ") # 输出: 5 4 3 2 1
允许类的实例像函数一样被调用。
class Adder:
def __init__(self, base):
self.base = base
def __call__(self, x):
return self.base + x
add_five = Adder(5)
print(add_five(3)) # 输出: 8
print(add_five(10)) # 输出: 15
本文由YuLe于2025-08-12发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20257938.html
发表评论