一切皆对象:我对python中对象的理解
前言
最近在学习机器学习和大模型,重新捡起 python 的过程中,对 python 语言的设计产生了好奇,所以进行了系统的学习。现在
正文
python 一切皆对象
不一样的对象
这句话十分有名,大多数了解过 python,甚至只是入门的开发者,可能也会听说过的一句话,但什么是对象?我想说的是,这里的对象其实并不严格意义上指代 OOP 中的对象或者叫 instance,因为在 python 中 instance 也是一个对象,叫 instance object,显然 instance 和 object 在 python 中并不是指代一个事物。所以 python 中对象的概念和其他 OOP 语言中的对象是不一样的。
什么是 python 中的对象
我们先来举例,python 中有哪些对象:
- class object
- instance object
- method object
- function object
- module object
他们的共同特点是不同的对象有不同的attribute,支持不同的operator
Assignments do not copy data
下面这个赋值语句的含义是产生一个 int 类型的 object,并将 x 这个 name 绑定到新生成的object
x = 3
为什么要这么复杂地解释一个赋值语句呢?看下面这个例子,如果这是一段 c 代码,那么在内存中我们可以看到两个 int 大小的内存被分配,也就是说,为 y 开辟了一段内存空间,并将 x 的值复制给了 y,但如果是一段 python 代码,我们只会消耗一个 int 大小的空间,因为我们只是将 y 这个 name 绑定到了 x 这个 name 所指向的 object。
x = 1
y = x
上面这段 python 中的语句等价的 c++语句如下[1],不同的是在 c++中 y 在初始化后不能指向其他对象 (也许指针是一个walkround)[2]
int x = 1;
int &y = x;
小结
在 python 中 object , name (或者叫 variable) , assignment 这三者的含义于以往的 c++、java 等语言略有不同,要掌握这门语言,需要先了解他们的区别
参考文献
理解 Python 中的描述符 | Shall We Code?
Descriptor Guide — Python 3.12.3 documentation

浙公网安备 33010602011771号