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__ 方法