在前2篇文章中,我们介绍了什么是面向对象,以及面向对象和面向过程的对比,而后便是一些python
对类的一些操作。第二篇文章,我们主要讲述了继承和多态。 本篇文章,我们将继续介绍python
的面向对象,我们将介绍类中的内置函数。
本篇文章所依赖的环境为:
类中的内置方法有哪些
python
中,除了我们第一篇讲述的构造函数__init__
和析构函数__del__
,其实class
中还有其他的内置方法,如__str__
,它则表示在使用print
函数打印类实例对象的时候,会调用__str__
。除此之外,还有__len__
、__repr__
、__getitem__
、__setitem__
、__getattr__
、以及__call__
等。
这些都属于python
的特殊方法,将用于对类或者对象进行特殊的初始化、操作 以及 销毁时,会进行的处理。
类为什么需要这些内置函数
因为需要有这些特性,比如,需要在创建类的时候,初始化一些设置,在删除类的对象的时候,执行一些销毁函数,如果开发者可以接入其中,为业务增添一些功能,可以给类和对象提供非常多的特性。让程序更加健壮。
通过内置函数,来说明一下类的声明周期
我们将通过重写一些内置方法,来说明类的声明周期,代码如下:
如上代码,我们定义了一个类aaa
,其中我们并未自己定义方法,而是重写了__init__
、__del__
、__call__``__new__
方法,其中__new__
方法,我们返回了父类的__new__
方法。
代码执行后,我们可以看到执行结果如下:
通过上述结果,我们可以看到,当我们在实例化类对象的时候,即: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__
的调用。
我们在上述的程序的基础上,增加了__str__
方法和__len__
方法,并且为__init__
方法增加了一个参数list
并且赋值给self.lists
,在__len__
方法中,我们返回了self.lists
的长度,在__str__
方法中,我们直接返回了父类的__str__(
方法。
最后在主函数中,我们调用了print(a)
和len(a)
。
程序执行结果如下:
可以发现,__str__
和__len__
方法都被执行了。所以说,有些内置变量并不是创建实例对象就会执行的,而是需要调用该方法,才会执行。
总结
本篇文章,我们承上启下,继续介绍了python
的内置函数,以及使用案例来说明,创建一个类,会经历哪些生命周期。但是有些内置函数,并不是创建了类就会执行的,而是需要在调用其方法的时候,才会被执行,例如: 对类实例调用print
方法,会调用类中内置方法__str__
、对类实例调用len
方法,会调用内置方法__len__
。