python|面向对象-3|类的生命周期

简介: python|面向对象-3|类的生命周期

在前2篇文章中,我们介绍了什么是面向对象,以及面向对象和面向过程的对比,而后便是一些python对类的一些操作。第二篇文章,我们主要讲述了继承和多态。 本篇文章,我们将继续介绍python的面向对象,我们将介绍类中的内置函数。


本篇文章所依赖的环境为:

image.png


类中的内置方法有哪些


python中,除了我们第一篇讲述的构造函数__init__和析构函数__del__,其实class中还有其他的内置方法,如__str__,它则表示在使用print函数打印类实例对象的时候,会调用__str__。除此之外,还有__len____repr____getitem____setitem____getattr__、以及__call__等。


这些都属于python的特殊方法,将用于对类或者对象进行特殊的初始化、操作 以及 销毁时,会进行的处理。



类为什么需要这些内置函数


因为需要有这些特性,比如,需要在创建类的时候,初始化一些设置,在删除类的对象的时候,执行一些销毁函数,如果开发者可以接入其中,为业务增添一些功能,可以给类和对象提供非常多的特性。让程序更加健壮。



通过内置函数,来说明一下类的声明周期


我们将通过重写一些内置方法,来说明类的声明周期,代码如下:

image.png

如上代码,我们定义了一个类aaa,其中我们并未自己定义方法,而是重写了__init____del____call__``__new__方法,其中__new__方法,我们返回了父类的__new__方法。

代码执行后,我们可以看到执行结果如下:


image.png


通过上述结果,我们可以看到,当我们在实例化类对象的时候,即:a = aaa(),我们会先调用__new__方法,该方法的作用是为对象分配内存,并且调用__new__方法,该方法会返回一个对象实例。 而后再调用__init__方法,该方法会进行初始化、设置属性的初始值等等。


当我们在执行对象的时候,即:a(),我们会调用__call__方法,当我们执行del a的时候,python会调用__del__方法来清理对象占用的内存空间。如果我们不写del a,当程序执行结束前,也会执行__del__方法。


但是你有没有发现一些问题呢? 我们除了定义__new____init____call____del__方法之外,我们还定义了__str____len__方法,为什么他们没有执行呢?

这是因为我们并未在对象使用过程中来调用,继而不会引发__str____len__方法被调用。我们可以修改一下程序,调用一下a对象,从而实现 __str____len__的调用。


image.png


我们在上述的程序的基础上,增加了__str__方法和__len__方法,并且为__init__方法增加了一个参数list并且赋值给self.lists,在__len__方法中,我们返回了self.lists的长度,在__str__方法中,我们直接返回了父类的__str__(方法。


最后在主函数中,我们调用了print(a)len(a)


程序执行结果如下:


image.png


可以发现,__str____len__方法都被执行了。所以说,有些内置变量并不是创建实例对象就会执行的,而是需要调用该方法,才会执行。



总结


本篇文章,我们承上启下,继续介绍了python的内置函数,以及使用案例来说明,创建一个类,会经历哪些生命周期。但是有些内置函数,并不是创建了类就会执行的,而是需要在调用其方法的时候,才会被执行,例如: 对类实例调用print方法,会调用类中内置方法__str__、对类实例调用len方法,会调用内置方法__len__



相关文章
|
1月前
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
67 2
|
27天前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
Python面向对象(2)
|
27天前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
Python面向对象
|
1月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
17 1
|
1月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
21 2
|
1月前
|
设计模式 开发者 Python
Python类里引用其他类
Python类里引用其他类
|
1月前
|
设计模式 开发者 Python
Python 类中引用其他类的实现详解
Python 类中引用其他类的实现详解
36 1
|
1月前
|
JSON 缓存 API
在 Python 中使用公共类处理接口请求的响应结果
在 Python 中使用公共类处理接口请求的响应结果
28 1
|
1月前
|
机器人 关系型数据库 Python
【Python篇】Python 类和对象:详细讲解(下篇)
【Python篇】Pyt hon 类和对象:详细讲解(下篇)
23 2
|
1月前
|
算法 Python
【Python篇】Python 类和对象:详细讲解(中篇)
【Python篇】Python 类和对象:详细讲解(中篇)
24 2