我们在前面学习的数据类型都是类,我们可以在类中使用很多方法。
1. 类的定义
类的定义使用的是class关键字,语法结构如下:
1 2 3 | class Name: '''类文档''' content |
Name为我们要创建的类的名字,注意我们在使用的时候尽量采用大写的方式,如果采用两个单词命名,两个单词的首字母都采用大写的方式。
类文档为我们写入的帮助我们理解这个类的信息。
content为类中的类体,包含变量、方法和属性等内容,如果我们在定义类的时候暂时不需要添入内容,可以采用pass语句充当一种占位语句。
我们来定义一个类:
1 2 3 4 5 | class School: #这种方式我们就定义了一个名为School的类 '''定义一个学校类''' pass school = School() #通过这种方式来调用这个类 print ( type (school)) #通过输出看一下它的类型print(school) |
输出结果为:
1 2 | < class '__main__.School' > <__main__.School object at 0x03372DD8 > |
通过结果我们可以看到school为一个类,通过第二行我们可以看出school是School类的实例。
2. __init__()方法
在创建类的时候,往往会创建一个__init__()方法,这种方法属于构造方法,也就是每次调用这个类都会使用这种方法,参数的传递也是在这个方法里。
这种方法中必须包含一个self参数,也必须是第一个参数,这个参数是指向这个实例本身的,它可以访问这个类中存在的属性和方法。
看下面的实例:
1 2 3 4 5 6 7 | class School: #这种方式我们就定义了一个类,如果我们要调用这个类 '''定义一个学校类''' def __init__( self ): print ( '这里是__init()__方法' ) def __judge__( self ): print ( '判断这个方法是否被调用' ) school = School() |
输出结果为:
1 | 这里是__init()__方法 |
通过输出我们可以看出只要调用了这个类就自动调用了这个__init__方法,而下面的__judge__方法是没有被调用的。
我们还可以通过循环的方式来验证一下是否每次调用这个类就会使用一次init方法:
看下面代码:
1 2 3 4 5 6 7 8 | class School: '''定义一个学校类''' count = 0 def __init__( self ): School.count + = 1 print ( '这里是__init()__方法的第%d次使用' % School.count) for i in range ( 5 ): School() |
输出结果为:
1 2 3 4 5 | 这里是__init()__方法的第 1 次使用 这里是__init()__方法的第 2 次使用 这里是__init()__方法的第 3 次使用 这里是__init()__方法的第 4 次使用 这里是__init()__方法的第 5 次使用 |
我们可以通过输出结果看出我们使用5次init方法,当我们第一次调用这个类的时候,count为0,然后通过init方法进行加1操作,在init方法里的school.count每次进行加1,然后最外面的count是不变的,通过这个例子我们可以了解到init的使用法发。
3. 参数传递
我们在学习函数的时候,参数的传递是定义在函数名内的,而在类中,我们通过init方法可以更方便的进行参数的传递。
看下面的例子:
1 2 3 4 5 6 | class GetAge: def __init__( self ,name,age): self .name = name self .age = age print ( '%s的年龄为%d' % (name,age)) GetAge( '小明' , 18 ) |
输出结果为:
1 | 小明的年龄为 18 |
我们需要注意,self是必不可少的,而且需要放在第一个,然后我们在调用这个类的时候,init方法中所包含的参数个数(不包含self),一定是等同于我们在调用的时候实际参数传递的个数。