四时宝库

程序员的知识宝库

object类:90%新手不知道的万物始祖与__str__重写黑科技

"为什么所有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还提供:

  1. __init__:对象初始化
  2. __eq__:定义相等比较
  3. __hash__:生成哈希值
  4. __getattribute__:属性访问拦截

下期预告:
"特殊属性__dict__、__class__揭秘,全面解析Python对象内部结构!"

"记住:object是Python面向对象的'造物主',__str__是对象的'名片'。掌握这些核心机制,让你的类从'技术怪胎'变身'优雅绅士'!"

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接