在 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 的内置特殊方法,用于自定义类的行为(如运算符、打印等),但它们需要你在类中显式实现。