Python中的object(对象)到底是什么?
网络文章
http://effbot.org/zone/python-objects.htm
- 这篇文章讨论了:
- 什么是python object?有哪些必备的属性?包含哪些必备的东西?
- 什么是name?name和python object之间的关系
- 什么是assignment?assignment statement的真正含义
- 一些笔记:
- name和object无关,name也不是object的属性,object本身也不知道他有哪些names
- Things like attribute assignment and item references are just syntactic sugar. Things like name.attr and name[index] are just syntactic sugar for method calls. The first corresponds to __setattr__/__getattr__, the second to __setitem__/__getitem__ (depending on which side of the assignment they appear).
- 类似的一些文章
-
https://www.zhihu.com/question/274264711/answer/382692134
文章大体内容类似,并举了一些例子
-
https://www.zhihu.com/question/274264711/answer/382692134
https://www.programiz.com/python-programming/namespace
- 这篇文章详细介绍了:
- name是什么,和object之间的关系,并举了实际的例子
- 关于namespace只有一些简单的介绍
https://www.zhihu.com/question/43498005
- 这些回答讨论了:
- 为什么python是强类型语言?
- 强类型语言/弱类型语言的区别?举出了一些例子
- 一些笔记:
- python中的变量只是一种标签(不能称之为引用?),引用(绑定)到真正的对象object
- 任何对变量进行的运算,由对象本身的方法来决定行为,举一个例子:
a+b等同于a.add(b),加法运算是对象的一个方法
python中的赋值操作不影响object本身>>> a = 100 >>> b = 's' >>> a+b Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str'
https://www.zhihu.com/question/38791962
- 非常有启发的讨论:
- 解释了Python中object和type两个关键字的含义:object是类父子关系的顶端,所有数据类型的父类归根结底都是他;type是类型和实例关系的顶端,所有对象都是他的实例。
- 同时也加深了对object(对象)和type(类型)这2个广义概念的理解
- 提出了一种三列模型:
- 元类列:Type,类的类,包括type(关键字),以及继承他的元类
- 类列:TypeObject,类型对象,包含大部分直接使用的数据类型
- 实例列:Instance
- 参考资料
自己的一些总结
- python中的所有东西都跟对象(object)这个概念有关,所有的数据都是由对象本身,或者对象之间的关系来表示
- object的定义可以参考C++中的定义(An object, in C++, is a region of storage that has XXX),就是一段包含各种属性/特性/组成部分的内存区域
- 组成object的属性为:
- a unique identity (an integer, returned by id(x))
- a type (returned by type(x))
- some content
- zero or more methods (provided by the type object)
- zero or more names
- object的type由另外的type object来表示(描述)
- object的方法也是用type object来提供,对object进行运算(各种表达式,比如成员赋值,加减法等)实际上调用的是object的相应方法
- python中的name只是一种标签(不能称之为引用?),引用(绑定)到真正的对象object.
- name -> object -> operator -> type object -> method