python 一切皆对象
python 一切皆对象
在python中有一句话“一切皆对象”,其实在刚开始接触python的时候对这句话完全不理解,即使是看完了python基础教程也没有很好的理解这句话的含义。直到看了python的源码才对这部分有了更深入的理解。我的入门指导书是《Python源码剖析深度探索动态语言核心技术》。
在python中下列语句其实都是一个共同点:
i = 1
s = "abcde"
def foo(): pass
class C(object): pass
instance = C()
l = [1,2]
t = (1,2)
他们在python解释器中执行的时候,都会在堆中新建了一个对象,然后把新建的对象绑定到变量名上。
i = 1 -----新建一个PyIntObject对象,然后绑定到i上
s = "abcde" -----新建一个PyStringObject对象,绑定到s上
def foo(): pass -----新建一个PyFunctionObject对象, 绑定到foo上
class C(object): pass -----新建一个类对象,绑定到C上
instance = C() -----新建一个实例对象,绑定到instance上
l = [1,2] -----新建一个PyListObject对象,绑定到l上
t = (1,2) -----新建一个PyTupleObject对象,绑定到t上
但是有一些是例外,他们就是python中的内建对象,比如PyInt_Type,PyString_Type,PyList_Type,他们都是全局变量,在代码中已经静态的初始化了这些类型的实现,但是这些全局变量都还要通过PyType_Ready的初始化才算真正初始化完成。
对象创建的控制
好吧,既然都是对象,那么class对象的创建(如上面例子中的C)和实例对象(如上面例子中的instance)的创建有什么不同呢?
个人觉得<type 'type'>
是完成了对class对象的创建控制,而实例对象的创建主要是通过 <type 'object'>
控制的。下面这张图就比较好的体现了type和object之间的关系,<type 'type'>
是所有类的metaclass,而新的class都是继承于<type 'object'>
,是所有类的父类,而a就是 class A的实例。
当然在代码中我们也可以控制对象创建的过程:
class Meta(type):def __getattribute__(*args):print"Metaclass getattribute invoked"return type.__getattribute__(*args)class C(object):__metaclass__ = Metadef __new__(cls):if not hasattr(cls, 'instance'):cls.instance = super(C, cls).__new__(cls)return cls.instancedef __getattribute__(*args):print "Class getattribute invoked"return super(C, self).__getattribute__(*args)
在代码中__metaclass__
实现了对class创建的控制,而__new__
实现了对实例创建的控制,因此__new__
方法应是算是class级别的。还有一个__init__
方法是对每个实例的初始化,所以这个方法应该算是instance级别的。
python 一切皆对象相关推荐
- python class用法理解_Python小世界:彻底搞懂Python一切皆对象!
犹记得当初学习Python的时候,对于 Python一切皆对象 很是懵逼,因为Python是面向对象的动态型语言,而在函数及高阶函数的应用中,如若对于一切皆对象不是有很透彻的了解,基础不是那么牢固的话 ...
- python数据符号函数等一切皆对象_第一章:Python高级编程-Python一切皆对象
第一章:Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 "" ...
- python 无法初始化设备prn_彻底搞懂Python一切皆对象,面试必过
犹记得当初学习Python的时候,对于Python一切皆对象很是懵逼,因为Python是面向对象的动态型语言,而在函数及高阶函数的应用中,如若对于一切皆对象不是有很透彻的了解,基础不是那么牢固的话,那 ...
- 彻底搞懂Python一切皆对象!!!
一切皆对象 前言 简述 Python的一等公民 type.object和class的关系 总结 前言 犹记得当初学习Python的时候,对于Python一切皆对象很是懵逼,因为Python是面向对象的 ...
- python一切皆对象 对象都有类_Python小世界:彻底搞懂Python一切皆对象!!!
前言 犹记得当初学习Python的时候,对于Python一切皆对象很是懵逼,因为Python是面向对象的动态型语言,而在函数及高阶函数的应用中,如若对于一切皆对象不是有很透彻的了解,基础不是那么牢固的 ...
- python一切皆对象的理解_Python中万物皆对象?的理解
在很多地方都看到有过这样一句话,但是对象这个词的理解依然停留在谈朋友那个对象上-- python中一切皆为对象,一个对象的特征也称为属性(attribute).它所具有的行为也称为方法(method) ...
- python一切皆对象的理解_在 Python 中万物皆对象
在 Python 中一切都是对象,并且几乎一切都有属性和方法.所有的函数都有一个内置的 __doc__ 属性,它会返回在函数源代码中定义的 doc string:sys 模块是一个对象,它有一个叫作 ...
- Python一切皆对象
Python从设计之初就是一门面向对象的语言,它有一个重要的概念,即一切皆对象. Java虽然也是面向对象编程的语言,但是血统没有Python纯正.比如Java的八种基本数据类型之一int,在持久化的 ...
- python一切皆对象的理解_Python难点解析---初级篇2.一切皆对象
在刚开始接触Python的时候,就一直听到一句话: 一切皆对象 那么,对于对象他有一些什么重要的属性呢. Python对象的属性 对于一个对象而言,他首先应该是具备类型这一属性,那么类型对应的则是值, ...
最新文章
- 失败 安装scikit_scikit-learn0.22版本最新发布
- Linux下计划任务和标准化工作流程
- 2020年服务器操作系统占有率,服务器操作系统占有率
- java的WebService实践(cxf)
- 使用puppeteer爬 EXTJS
- 关于百度地图api测距显示NaN的解决方案
- 谷歌chrome浏览器的源码分析(三)
- 创建一个存储函数,返回指定员工的姓名,薪水和年收入
- 和菜鸟一起学c++之虚函数
- 《团队名称》第八次团队作业:Alpha冲刺day5
- 破51项国际榜单纪录!解读华为云擎天架构调度求解引擎
- Oracle触发器6-管理触发器
- 为Exchange Server创建多主机名证书
- 寒江独钓——win内核编程读书笔记-1
- 中文编码--中国程序员之”银弹“?
- JS中的slice和splice
- VS2017 激活密钥
- Android-Binder机制
- 关于{高级语言和低级语言}的。谬论!思想误区!解释。author:盗墓者是个丑奴儿
- Rust中的面向对象编程Rusty OOP