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__



相关文章
|
7天前
|
Python
你真的会面向对象吗!解密Python“魔术方法”
你真的会面向对象吗!解密Python“魔术方法”
16 0
|
2月前
|
缓存 监控 程序员
Python中的装饰器是一种特殊类型的声明,它允许程序员在不修改原有函数或类代码的基础上,通过在函数定义前添加额外的逻辑来增强或修改其行为。
【6月更文挑战第30天】Python装饰器是无侵入性地增强函数行为的工具,它们是接收函数并返回新函数的可调用对象。通过`@decorator`语法,可以在不修改原函数代码的情况下,添加如日志、性能监控等功能。装饰器促进代码复用、模块化,并保持源代码整洁。例如,`timer_decorator`能测量函数运行时间,展示其灵活性。
27 0
|
9天前
|
供应链 数据挖掘 Serverless
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
|
3天前
|
对象存储 Python
Python代码解读-理解-定义一个User类的基本写法
以上描述清晰地阐述了如何在Python中定义 `User`类的基本方法以及如何创建和使用该类的实例。这是面向对象编程中的核心概念,是紧密结合抽象和实现,封装数据并提供操作数据的接口。由于用简单通用的语言易于理解,这样的解释对于初学者而言应该是友好且有帮助的。
12 4
|
13天前
|
测试技术 数据处理 数据格式
Python中动态类和动态方法的创建与调用
【8月更文挑战第5天】在Python中,`type`函数可用于创建动态类,结合`types.MethodType`可创建动态方法。例如,定义`dynamic_method`后,可通过`type`创建包含该方法的`DynamicClass`。同样,对于已存在的类实例,可通过`types.MethodType`绑定新方法。这种动态特性适用于自动化测试框架或数据处理应用等场景,实现根据需求动态生成类及方法以执行特定逻辑。
|
10天前
|
程序员 Ruby Python
Python里的类和对象是什么?
本文介绍了Python中面向对象编程的核心概念——类与对象。类作为一种“蓝图”,定义了一组属性和方法,用于描述一类对象的共同特征与行为。通过类可以创建具体的对象实例,每个对象拥有类所定义的属性和方法。文章通过`Human`类的例子详细展示了如何定义类、初始化对象及其属性、定义方法,以及如何给对象添加自定义属性。此外,还介绍了如何通过类创建多个具有不同特性的对象实例,并探讨了属性覆盖和使用`@property`装饰器实现只读属性的方法。
|
11天前
|
数据可视化 Python
【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 问题分析、数学模型及python代码实现
本文介绍了2023年高教社杯数学建模竞赛C题,涉及蔬菜类商品的自动定价与补货决策,包括问题分析、数学模型的构建以及Python代码实现,旨在优化商超的补货和定价策略以提高收益。
28 1
|
17天前
|
安全 算法 Go
Python面向对象的三大特性
python面向对象编程(OOP)的三大特性是封装、继承和多态。这些特性共同构成了OOP的基础,使得软件设计更加灵活、可维护和可扩展。
14 3
|
22天前
|
数据采集 Java C语言
Python面向对象的高级动态可解释型脚本语言简介
Python是一种面向对象的高级动态可解释型脚本语言。
17 3
|
26天前
|
Python
Python中使用类和对象
【7月更文挑战第23天】
18 6