在Python的面向对象体系中,object是所有类的基类,文档中出现的object.前缀是一种明确的标注约定,用来指示该成员属于object基类,是所有实例默认具备的通用能力。这个约定能帮助开发者快速定位类成员的来源,理清继承层级关系。

object.前缀的核心约定
Python官方文档中,当描述某个方法是所有类都默认继承的通用方法时,会使用object.方法名的形式标注,明确说明该方法来自object基类,而非某个具体自定义类的特有方法。常见的带有object.前缀的成员包括__init__、__str__、__repr__、__eq__等双下方法,这些方法是Python对象的基础行为定义。
这个约定的核心作用是区分成员的归属层级:如果文档中直接写方法名,通常表示该方法是当前描述类的特有方法;如果标注为object.方法名,则代表该方法是所有类都从object基类继承而来的通用方法。
常见object.前缀成员的实践场景
1. 初始化方法object.__init__
object.__init__是所有类的默认初始化方法,当自定义类没有重写__init__时,实例化对象会自动调用这个基类方法。下面的示例展示了继承关系中的初始化逻辑:
# 自定义类未重写__init__,会继承object.__init__
class MyClass:
pass
obj = MyClass()
# 调用的是object.__init__,无额外初始化逻辑
print(obj) # 输出类似 <__main__.MyClass object at 0x7f8a1b2c3d40>
# 自定义类重写__init__,会覆盖object.__init__的默认行为
class Person:
def __init__(self, name):
self.name = name
p = Person("张三")
print(p.name) # 输出 张三
2. 字符串表示方法object.__str__和object.__repr__
object.__str__定义了对象被str()调用或打印时的字符串表现,object.__repr__定义了对象被repr()调用时的官方字符串表示,两者的默认实现都来自object基类。我们可以通过重写这两个方法自定义对象的字符串输出:
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
# 重写object.__str__,定义用户友好的输出
def __str__(self):
return f"图书名称:{self.title},作者:{self.author}"
# 重写object.__repr__,定义明确的对象标识
def __repr__(self):
return f"Book(title='{self.title}', author='{self.author}')"
book = Book("Python编程", "李四")
print(str(book)) # 输出 图书名称:Python编程,作者:李四
print(repr(book)) # 输出 Book(title='Python编程', author='李四')
3. 比较方法object.__eq__
object.__eq__定义了对象的相等比较逻辑,默认情况下object基类的__eq__比较的是两个对象的内存地址,也就是只有同一个对象才会判定为相等。我们可以通过重写这个方法实现自定义的比较规则:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
# 重写object.__eq__,判断坐标是否相同
def __eq__(self, other):
if not isinstance(other, Point):
return False
return self.x == other.x and self.y == other.y
p1 = Point(1, 2)
p2 = Point(1, 2)
p3 = Point(2, 3)
print(p1 == p2) # 输出 True,坐标相同
print(p1 == p3) # 输出 False,坐标不同
阅读文档时的注意事项
当在Python官方文档中看到object.前缀的成员说明时,需要注意以下几点:
- 该成员是所有类的通用成员,不需要在自定义类中额外定义就可以使用
- 如果自定义类需要修改该成员的默认行为,直接重写对应的双下方法即可
- 部分object基类的成员在Python 2和Python 3中有差异,当前Python 3中所有类都默认继承object,无需显式声明
掌握object.前缀的约定,能帮助我们更高效地阅读Python官方文档,快速理解类成员的来源和作用,在编写面向对象代码时也能更清晰地规划类的方法设计,避免重复定义通用能力。