在 Python 中,以双下划线开头和结尾的函数(如 __str__
、__sub__
等)被称为特殊方法(Special Methods)或魔术方法(Magic Methods)。它们确实是 Python 内置的,用于定义类的行为,比如运算符重载、对象表示等。但严格来说,它们并不是“函数”,而是类的方法(method)。
常见双下划线方法(内置方法)示例:
__str__
:定义对象的字符串表示形式(str(obj)
或print(obj)
时调用)。__sub__
:定义减法操作符-
的行为(如obj1 - obj2
)。__init__
:构造函数,初始化对象。__len__
:定义对象的长度(len(obj)
时调用)。__add__
:定义加法操作符+
的行为。
你提到的代码:
def __str__(self):return f'{self.x}, {self.y}'def __sub__(self, other):return (self.x - other.x, self.y - other.y)
__str__
方法会在调用print(obj)
时返回一个格式化的字符串。__sub__
方法允许两个对象使用-
运算符相减,返回一个元组。
关键点:
- 内置方法:这些方法是 Python 预定义的,但需要你自己在类中实现它们。
- 触发时机:它们通常由 Python 解释器在特定场景自动调用(如运算符操作、打印对象等)。
- 不是普通函数:它们是类的方法,必须定义在类中。
示例完整类:
class Point:def __init__(self, x, y):self.x = xself.y = ydef __str__(self):return f'{self.x}, {self.y}'def __sub__(self, other):return (self.x - other.x, self.y - other.y)# 使用
p1 = Point(3, 4)
p2 = Point(1, 2)
print(p1) # 调用 __str__,输出 "3, 4"
print(p1 - p2) # 调用 __sub__,输出 (2, 2)
总结:
双下划线方法是 Python 的内置特殊方法,用于自定义类的行为(如运算符、打印等),但它们需要你在类中显式实现。