Python object() 函数

Python object() 语法

object() 是 Python 的一个内置函数,它返回一个 object 对象。object 对象是所有类的基类,该对象没有任何特殊的属性和方法。

语法:

object()

说明:

object() 函数不接收任何参数。

对于 object() 函数,小伙伴们需要清楚以下几点。

  • object() 函数创建的所有对象都与其他对象不同。简单来说,object() 创建的所有对象都是唯一的。
  • 我们不能给 object 对象添加新属性或新方法。
  • 所有 Python 的类都直接或间接继承自 object 类。如果你在 Python 中定义了一个新类,并且没有明确指定继承哪个类,那么该类就会自动成为 object 类的子类。例如,class MyClass: 等价于 class MyClass(object):。
  • 虽然 object 类不包含任何有用的属性和方法,但它定义了一些特殊的魔术方法。比如 __new__()__init__(),这些方法在 Python 类的创建和初始化中发挥了关键作用。

Python object() 摘要

使用频率
官方文档 查看
相关函数 type()isinstance()issubclass()

Python object() 示例

接下来,我们通过几个简单的例子来讲解一下 Python object() 函数是如何使用的。

示例 1:object() 基本用法

obj = object()
print(obj)
print(type(obj))
print(dir(obj))

运行结果如下。

<object object at 0x000002063EA141A0>

<class 'object'>

['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

示例 2:判断继承关系

class MyObject:
    pass

result = issubclass(MyObject, object)
print(result)

运行结果如下。

True

分析:

在上面例子中,我们使用了 issubclass() 函数来判断 MyObject 这个类是否继承了 object 类。

示例 3:尝试修改 object 实例

obj = object()
obj.name = 'test'

运行结果如下。

(报错)AttributeError: 'object' object has no attribute 'name' and no __dict__ for setting new attributes

分析:

如果尝试修改 object 实例(即使用 object() 创建的对象),则会抛出 AttributeError 异常。

示例 4:覆盖 object 的默认方法

class MyObject:
    def __str__(self):
        return 'MyObject Instance'

obj = MyObject()
print(obj)

运行结果如下。

MyObject Instance

分析:

在上面例子中,我们定义了一个名为 MyObject 的类,并在其中重写了 __str__() 方法,使其返回字符串 'MyObject Instance'。

当创建 MyObject 的实例 obj 并调用 print(obj) 时,__str__() 方法会被自动调用,因此输出结果为 'MyObject Instance'。

常见问题

1. 为什么不能向 object 实例添加属性?

我们无法直接向 object() 函数返回的实例添加属性,例如 obj.name = 'Test' 会抛出 AttributeError 异常。这是因为 object 类的设计理念是作为所有 Python 类的最底层、最基础的基类,它的实例是不允许拥有 __dict__ 属性的。

2. 如何在自定义类中正确使用 object 的方法?

虽然 object() 实例本身没有太多可直接调用的方法,但作为所有类的基类,它定义了一些重要的 “魔法方法”(magic methods),如 __init__()__str__()__repr__()__eq__()__hash__() 等。

当我们自定义类时,可以通过 super() 函数来调用这些基类方法,比如:

class MyObject:
    def __init__(self):
        super().__init__()      # 调用 object 的 __init__ 方法

上一篇: anext()

下一篇: type()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号