最新消息:

python青少年编程第三季——05、灵魂方法__init__()和类方法

Python 少儿编程 1656浏览 0评论
Python青少年编程第三季

各位小伙伴大家好:

上期我们聊到了怎么给类添加和修改属性,本期我们来聊聊Python中的构造函数__init__()方法,相对于C++来说Python的构造函数要简介的多。

 

那么,它的作用是什么呢?

 

在上期的实例中,我们实现两只猫的不同姓名和年龄,是通过修改属性来实现的,代码如下:

 

python青少年编程第三季——05、灵魂方法__init__()和类方法

 

这种方法应付数量比较少的对象还是足够的,但是如果要给很多并且名字还相似的对象赋不同的值,就会有点吃力了。

 

那么有没有什么方法,能够让对象一产生就可以获得相应的属性值呢?

 

就好比人一出生就获得了性别、出生日期和出生地等属性,这些属性是一出生就产生的,而不是像名字一样需要等长辈们翻几天字典之后再决定的。

 

答案就是今天要和大家分享的__init__()方法,也就是构造函数。

 

来看一个实例代码

 

python青少年编程第三季——05、灵魂方法__init__()和类方法

 

代码中我们定义一个Dog类,接着就是我们的__init__()方法,它接受三个参数第一个参数是默认的,必须self,后面两个参数用于接收在对象创建时候我们所传的参数比如“二哈”和10.

来看看结果怎么样:

 

python青少年编程第三季——05、灵魂方法__init__()和类方法

 

运行正常,这样我们就实现了erha所指向的对象一创建就有了名字和年龄,而不是等到在程序运行中再去修改属性来实现。而且程序结构也更清晰,代码也更简洁。

 

为了加深大家对__init__()方法的理解,我们对代码稍微做点改变。

 

python青少年编程第三季——05、灵魂方法__init__()和类方法

 

和上面的代码相比只增加了一行,用于输出一段文字,来看看看结果:

 

python青少年编程第三季——05、灵魂方法__init__()和类方法

 

在调用每个对象方法之前,都先输出了提示语句。而在代码中我们却并没有显示调用init方法,这是因为在python中,实例化对象的时候会默认优先调用init方法,对象进行初始化

 

看完了我们灵魂方法之后,顺便来了解一下类方法,示例如下:

 

python青少年编程第三季——05、灵魂方法__init__()和类方法

 

第二行 n = 0是定义了一个类属性,这个属性属于类,为所有对象共用。

 

接下的@classmethod是一个类方法装饰器,它的作用是装饰下面的方法。有关装饰器和迭代器的使用,以后再和大家分享。

 

装饰器下面是方法num的定义,num(cls)方法里面有一个参数cls,这个参数是类方法的标识,与实例方法中的self不同,且不能省略。

 

下面我们来看看运行结果:

 

python青少年编程第三季——05、灵魂方法__init__()和类方法

 

实现了类方法的功能,就是程序每实例化一个狗类对象,就将总数量也就是num的值加一。

 

最后请大家思考一下cls.num和slef.name、slef.age的异同,以及为什么要分别加上cls和self。

 

本期有关__inti__方法和类方法就为大家分享到这里,我们下期再会。

 

欢迎扫描下方二维码和我交流

python青少年编程第三季——05、灵魂方法__init__()和类方法

转自公众号:
高维数学

您必须 登录 才能发表评论!