"为什么所有Python类都有相同的神秘方法?如何自定义对象输出内容?object类隐藏着怎样的宇宙奥秘?3分钟解密Python面向对象的终极始祖!"
一、object类:万物起源
核心认知:
- 所有Python类的终极基类
- 没有显式继承的类默认继承object
- 提供所有对象共有的基础方法
# 验证object的始祖地位
class Student: pass # 隐式继承object
class Teacher(object): pass # 显式继承object
print(issubclass(Student, object)) # 输出:True
print(issubclass(Teacher, object)) # 输出:True
深刻启示:
"在Python宇宙中,object如同造物主,所有类都是它的'后代'"
二、dir()函数:探索对象DNA
功能:查看对象所有属性和方法(继承自object类)
class SimpleClass: pass
obj = SimpleClass()
print(dir(obj)) # 输出对象的所有属性和方法
典型输出:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',
'__module__', '__ne__', '__new__', '__reduce__', ...]
关键发现:
即使空类也有30+方法,全部继承自object基类!
三、__str__方法:对象的"自我介绍"
默认行为:输出对象内存地址
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
stu = Student("张三", 20)
print(stu) # 输出:<__main__.Student object at 0x7f8a5c0e5d00>
重写实战:自定义友好输出
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
# 重写__str__方法
def __str__(self):
return f"我的名字是{self.name},今年{self.age}岁"
stu = Student("张三", 20)
print(stu) # 输出:我的名字是张三,今年20岁
最佳实践:
在自定义类中重写__str__,提供有意义的对象描述
四、重写前后对比
场景 | 默认行为 | 重写后行为 |
直接打印对象 | 输出内存地址 | 输出自定义描述信息 |
开发调试 | 需额外查看属性 | 直接显示关键信息 |
用户体验 | 技术性描述(不友好) | 人性化描述(友好) |
代码可读性 | 低 | 高 |
五、object类的特殊方法
除__str__外,object还提供:
- __init__:对象初始化
- __eq__:定义相等比较
- __hash__:生成哈希值
- __getattribute__:属性访问拦截
下期预告:
"特殊属性__dict__、__class__揭秘,全面解析Python对象内部结构!"
"记住:object是Python面向对象的'造物主',__str__是对象的'名片'。掌握这些核心机制,让你的类从'技术怪胎'变身'优雅绅士'!"