首页 > 编程知识 正文

python成长之对象篇(Python对象)

时间:2023-12-23 11:38:07 阅读:319299 作者:WNHL

本文目录一览:

Python语言中的对象概述是怎样的

在Python中,一切目标都共有一些特性,这些特性界说在PyObject中。PyObject界说在Include/object.h中:#definePyObject_HEAD

简化后即为:typedefstruct_object{

在PyObject中,ob_refcnt用以记载目标的引证数(与引证计数的内存收回有关,这儿暂且不表),当有新的指针指向某目标时,ob_refcnt的值加1,当指向某目标的指针删去时,ob_refcnt的值减1,当其值为零的时分,则能够将该目标从堆中删去(事实上并不会当即删去,这儿暂且不表)。除了ob_refcnt之外,还有一个指向_typeobject指针ob_type。这个构造体用于表明目标类型。越过_typeobject,能够发现,Python目标的中心在于一个引证计数和一个类型信息。

PyObject界说的内容会出如今每个目标所占内存的开端有些。

定长目标与变长目标

在Python中,除了boolfloat这么的定长目标(一旦断定下来需求的内存,便不再有改动),还有另外一种目标:长度可变的目标。这种目标在Python的完成中经过PyVarObject构造体来表明:#definePyObject_VAR_HEAD

事实上,即是在PyObject的基础上,多了一个ob_size变量,用以标识目标的长度(是长度,不是内存占用)。也即是说,本来PyVarObject即是PyObject的一个拓宽,所以,在Python中,一切的目标都能够经过PyObject*指针来引证,这一点非常重要,它使得许多操作变得一致(这篇博客暂不胪陈)。

由此,Python中一切目标在完成的时分,内存无非如下两种状况:定长目标变长目标

道生一:PyTypeObject

在描绘PyObject的时分,提到了一个_typeobject构造体。那么,它是干什么的呢?幻想一下,一个目标在创立的时分需求多少内存、这个目标的类名是什么等等信息,又是怎么记载和区别的呢?

_typeobject(也即是PyTypeObject)能够被称之为“指定目标类型的类型目标”,其界说如下:typedefstruct_typeobject{

能够理解为,PyTypeObject目标是Python中面向目标理念中“类”这个概念的完成,这儿仅仅简略介绍其界说中的有些内容:

ty_name:类型名tp_basicsize,tp_itemsize:创立类型目标时分配的内存大小信息被省掉掉的有些:与该类型相关的操作(函数指针)

这儿仅仅简略描绘,上面的内容有些偏颇,暂不用过分深究。

再看一眼PyTypeObject的界说,能够发如今最开端也有一个PyObject_VAR_HEAD,这意味着它也是一个目标。那么,PyTypeObject既然是指示类型的目标,那么它的类型又是什么呢?答案是PyType_Type:PyTypeObjectPyType_Type={

事实上,它即是Python语言中的type目标即是PyType_Type,它是一切class的class,在Python中叫做metaclass。本来,在完成中它的ob_type指针又指向了自己自身,既是:PyType_Type

python极简教程:对象的方法

这一场,主讲python的面向对象的第二部分—— 对象的方法 。

目的:掌握Python对象的五个核心方法。

讲解之前,先上一段代码

通过前面的学习,你能说出这段代码运行的输出结果吗?

答案是:

通常,我们会认为__init__()是类的初始化方法,当实例化类之后,会优先执行它(运行后应当优先输出"init"、"init 张三"),但实际上,__new__()方法才优先执行的方法,同时,它也是创建对象的方法。

说得通俗一点:以造房子举例,new方法是打地基,存放建材原料,init方法则是按照图纸建造房子。

那么,什么时候用new方法?

其实,用得很少,更多的时候,我们使用的是init方法。但init方法用久了之后,就会误以为它是创建实例的方法,而实际上,new方法才是创建实例的方法。

大家谨记,以免面试时踩坑。

首先,先讲讲这三个方法如何使用。

到这里,你可能会问,这东西有啥用?

如果你只想写个脚本,执行一些简单的程序,那确实没啥用。你可以不关心这三个方法以及他们的调用,甚至连class类都不用写,直接def搞定。

但是,如果你想进阶,理解面向对象,它们很重要。

python之面向对象

面向对象(OOP)是一种对现实世界理解和抽象的方法,对象的含义是指在现实生活中的具体事物, 一切皆对象 ,Python 是一门面向对象的语言,面向对象编程简单来说就是一种 封装代码 的方式。

Python 中类的定义使用 class 关键字定义类,语法如下所示:

举例,定义一个类 Cat

构造方法 init() 会在类实例化时自动调用。无论构造方法还是其他方法都需要将 self 作为第一个参数,它代表类的实例。

类创建好后,可以直接通过类名访问属性,格式为: 类名.属性名 ,比如我们访问 Cat 类的 color 属性,如下所示:

创建对象也称类的实例化,比如我们通过 Cat 类创建对象,如下所示:

创建好对象后,使用它访问属性和调用方法了,如下所示:

内部私有属性和方法是可以被访问和调用的。

我们来一起看个例子,如下所示:

输出结果:

Python 支持类的继承,而且支持多继承,语法格式为:

示例如下所示:

如果继承的父类方法不能满足我们的需求,这时子类可以 重写 父类方法,如下所示:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。